equal
deleted
inserted
replaced
54 return global_poll(); |
54 return global_poll(); |
55 } |
55 } |
56 } |
56 } |
57 |
57 |
58 void SafepointMechanism::block_if_requested(JavaThread *thread) { |
58 void SafepointMechanism::block_if_requested(JavaThread *thread) { |
59 if (uses_thread_local_poll() && !SafepointMechanism::local_poll_armed(thread)) { |
59 if (uses_thread_local_poll() && !local_poll_armed(thread)) { |
60 return; |
60 return; |
61 } |
61 } |
62 block_if_requested_slow(thread); |
62 block_if_requested_slow(thread); |
63 } |
63 } |
64 |
64 |
68 |
68 |
69 void SafepointMechanism::disarm_local_poll(JavaThread* thread) { |
69 void SafepointMechanism::disarm_local_poll(JavaThread* thread) { |
70 thread->set_polling_page(poll_disarmed_value()); |
70 thread->set_polling_page(poll_disarmed_value()); |
71 } |
71 } |
72 |
72 |
|
73 void SafepointMechanism::disarm_if_needed(JavaThread* thread, bool memory_order_release) { |
|
74 JavaThreadState jts = thread->thread_state(); |
|
75 if (jts == _thread_in_native || jts == _thread_in_native_trans) { |
|
76 // JavaThread will disarm itself and execute cross_modify_fence() before continuing |
|
77 return; |
|
78 } |
|
79 if (memory_order_release) { |
|
80 thread->set_polling_page_release(poll_disarmed_value()); |
|
81 } else { |
|
82 thread->set_polling_page(poll_disarmed_value()); |
|
83 } |
|
84 } |
|
85 |
73 void SafepointMechanism::arm_local_poll_release(JavaThread* thread) { |
86 void SafepointMechanism::arm_local_poll_release(JavaThread* thread) { |
74 thread->set_polling_page_release(poll_armed_value()); |
87 thread->set_polling_page_release(poll_armed_value()); |
75 } |
88 } |
76 |
89 |
77 void SafepointMechanism::disarm_local_poll_release(JavaThread* thread) { |
90 void SafepointMechanism::disarm_local_poll_release(JavaThread* thread) { |