src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.hpp
branchJEP-349-branch
changeset 57873 68134337dbf8
parent 57870 00860d9caf4d
child 57983 a57907813a83
--- a/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.hpp	Sun Aug 25 13:27:54 2019 +0200
+++ b/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceIdEpoch.hpp	Sun Aug 25 15:13:16 2019 +0200
@@ -26,7 +26,7 @@
 #define SHARE_JFR_RECORDER_CHECKPOINT_TYPES_TRACEID_JFRTRACEIDEPOCH_HPP
 
 #include "memory/allocation.hpp"
-#include "jfr/utilities/jfrTypes.hpp"
+#include "runtime/orderAccess.hpp"
 
 #define USED_BIT 1
 #define METHOD_USED_BIT (USED_BIT << 2)
@@ -44,6 +44,8 @@
   friend class JfrCheckpointManager;
  private:
   static bool _epoch_state;
+  static bool volatile _klass_tagged_in_epoch;
+
   static void shift_epoch();
 
  public:
@@ -86,6 +88,20 @@
   static traceid method_and_class_in_use_prev_epoch_bits() {
     return _epoch_state ? METHOD_AND_CLASS_IN_USE_EPOCH_1_BITS :  METHOD_AND_CLASS_IN_USE_EPOCH_2_BITS;
   }
+
+  static bool is_klass_tagged_in_epoch() {
+    if (OrderAccess::load_acquire(&_klass_tagged_in_epoch)) {
+      OrderAccess::release_store(&_klass_tagged_in_epoch, false);
+      return true;
+    }
+    return false;
+  }
+
+  static void set_klass_tagged_in_epoch() {
+    if (!OrderAccess::load_acquire(&_klass_tagged_in_epoch)) {
+      OrderAccess::release_store(&_klass_tagged_in_epoch, true);
+    }
+  }
 };
 
 #endif // SHARE_JFR_RECORDER_CHECKPOINT_TYPES_TRACEID_JFRTRACEIDEPOCH_HPP