42 if (thread->is_Java_thread()) {
43 return local_poll_armed((JavaThread*)thread);
44 } else {
45 // If the poll is on a non-java thread we can only check the global state.
46 return global_poll();
47 }
48 }
49
50 bool SafepointMechanism::poll(Thread* thread) {
51 if (uses_thread_local_poll()) {
52 return local_poll(thread);
53 } else {
54 return global_poll();
55 }
56 }
57
58 void SafepointMechanism::block_if_requested_local_poll(JavaThread *thread) {
59 bool armed = local_poll_armed(thread); // load acquire, polling page -> op / global state
60 if(armed) {
61 // We could be armed for either a handshake operation or a safepoint
62 if (thread->has_handshake()) {
63 thread->handshake_process_by_self();
64 } else {
65 if (global_poll()) {
66 SafepointSynchronize::block(thread);
67 }
68 }
69 }
70 }
71
72 void SafepointMechanism::block_if_requested(JavaThread *thread) {
73 if (uses_thread_local_poll()) {
74 block_if_requested_local_poll(thread);
75 } else {
76 // If we don't have per thread poll this could a handshake or a safepoint
77 if (global_poll()) {
78 SafepointSynchronize::block(thread);
79 }
80 }
81 }
82
83 void SafepointMechanism::arm_local_poll(JavaThread* thread) {
84 thread->set_polling_page(poll_armed_value());
85 }
86
87 void SafepointMechanism::disarm_local_poll(JavaThread* thread) {
|
42 if (thread->is_Java_thread()) {
43 return local_poll_armed((JavaThread*)thread);
44 } else {
45 // If the poll is on a non-java thread we can only check the global state.
46 return global_poll();
47 }
48 }
49
50 bool SafepointMechanism::poll(Thread* thread) {
51 if (uses_thread_local_poll()) {
52 return local_poll(thread);
53 } else {
54 return global_poll();
55 }
56 }
57
58 void SafepointMechanism::block_if_requested_local_poll(JavaThread *thread) {
59 bool armed = local_poll_armed(thread); // load acquire, polling page -> op / global state
60 if(armed) {
61 // We could be armed for either a handshake operation or a safepoint
62 if (global_poll()) {
63 SafepointSynchronize::block(thread);
64 }
65 if (thread->has_handshake()) {
66 thread->handshake_process_by_self();
67 }
68 }
69 }
70
71 void SafepointMechanism::block_if_requested(JavaThread *thread) {
72 if (uses_thread_local_poll()) {
73 block_if_requested_local_poll(thread);
74 } else {
75 // If we don't have per thread poll this could a handshake or a safepoint
76 if (global_poll()) {
77 SafepointSynchronize::block(thread);
78 }
79 }
80 }
81
82 void SafepointMechanism::arm_local_poll(JavaThread* thread) {
83 thread->set_polling_page(poll_armed_value());
84 }
85
86 void SafepointMechanism::disarm_local_poll(JavaThread* thread) {
|