diff -r 2c3cc4b01880 -r c16ac7a2eba4 src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.cpp --- a/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.cpp Wed Oct 30 16:14:56 2019 +0100 +++ b/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.cpp Wed Oct 30 19:43:52 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,15 +25,13 @@ #include "precompiled.hpp" #include "jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.hpp" #include "runtime/safepoint.hpp" -#include "runtime/orderAccess.hpp" // Alternating epochs on each rotation allow for concurrent tagging. -// The regular epoch shift happens only during a safepoint. -// The fence is there only for the emergency dump case which happens outside of safepoint. +// The epoch shift happens only during a safepoint. bool JfrTraceIdEpoch::_epoch_state = false; +bool volatile JfrTraceIdEpoch::_tag_state = false; + void JfrTraceIdEpoch::shift_epoch() { + assert(SafepointSynchronize::is_at_safepoint(), "invariant"); _epoch_state = !_epoch_state; - if (!SafepointSynchronize::is_at_safepoint()) { - OrderAccess::fence(); - } }