diff src/hotspot/share/runtime/safepoint.cpp @ 51582:7f462e8383f6

8206003: SafepointSynchronize with TLH: StoreStore barriers should be moved out of the loop Reviewed-by: eosterlund, rehn, dholmes
author mdoerr
date Mon, 02 Jul 2018 11:46:15 +0200
parents 83aec1d357d4
children f939a67fea30
line wrap: on
line diff
--- a/src/hotspot/share/runtime/safepoint.cpp	Mon Jul 02 09:38:20 2018 +0200
+++ b/src/hotspot/share/runtime/safepoint.cpp	Mon Jul 02 11:46:15 2018 +0200
@@ -243,9 +243,10 @@
     if (SafepointMechanism::uses_thread_local_poll()) {
       // Arming the per thread poll while having _state != _not_synchronized means safepointing
       log_trace(safepoint)("Setting thread local yield flag for threads");
+      OrderAccess::storestore(); // storestore, global state -> local state
       for (JavaThreadIteratorWithHandle jtiwh; JavaThread *cur = jtiwh.next(); ) {
         // Make sure the threads start polling, it is time to yield.
-        SafepointMechanism::arm_local_poll(cur); // release store, global state -> local state
+        SafepointMechanism::arm_local_poll(cur);
       }
     }
     OrderAccess::fence(); // storestore|storeload, global state -> local state
@@ -546,7 +547,7 @@
         for (; JavaThread *current = jtiwh.next(); ) {
           ThreadSafepointState* cur_state = current->safepoint_state();
           cur_state->restart(); // TSS _running
-          SafepointMechanism::disarm_local_poll(current); // release store, local state -> polling page
+          SafepointMechanism::disarm_local_poll(current);
         }
         log_info(safepoint)("Leaving safepoint region");
       } else {