--- a/src/hotspot/share/runtime/safepointMechanism.cpp Fri Feb 15 07:53:03 2019 -0500
+++ b/src/hotspot/share/runtime/safepointMechanism.cpp Fri Feb 15 14:15:10 2019 +0100
@@ -86,6 +86,9 @@
void SafepointMechanism::block_if_requested_slow(JavaThread *thread) {
// local poll already checked, if used.
if (global_poll()) {
+ // Any load in ::block must not pass the global poll load.
+ // Otherwise we might load an old safepoint counter (for example).
+ OrderAccess::loadload();
SafepointSynchronize::block(thread);
}
if (uses_thread_local_poll() && thread->has_handshake()) {