1.1 --- a/src/share/vm/runtime/thread.hpp Thu Dec 05 15:13:12 2013 -0800 1.2 +++ b/src/share/vm/runtime/thread.hpp Mon Dec 02 10:26:14 2013 +0100 1.3 @@ -1044,8 +1044,14 @@ 1.4 address last_Java_pc(void) { return _anchor.last_Java_pc(); } 1.5 1.6 // Safepoint support 1.7 - JavaThreadState thread_state() const { return _thread_state; } 1.8 - void set_thread_state(JavaThreadState s) { _thread_state=s; } 1.9 + // Use membars when accessing volatile _thread_state. See 1.10 + // Threads::create_vm() for size checks. 1.11 + JavaThreadState thread_state() const { 1.12 + return (JavaThreadState) OrderAccess::load_acquire((volatile jint*)&_thread_state); 1.13 + } 1.14 + void set_thread_state(JavaThreadState s) { 1.15 + OrderAccess::release_store((volatile jint*)&_thread_state, (jint)s); 1.16 + } 1.17 ThreadSafepointState *safepoint_state() const { return _safepoint_state; } 1.18 void set_safepoint_state(ThreadSafepointState *state) { _safepoint_state = state; } 1.19 bool is_at_poll_safepoint() { return _safepoint_state->is_at_poll_safepoint(); }