src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp
branchJEP-349-branch
changeset 57983 a57907813a83
parent 57902 f6502e486572
child 57988 6fa0074508ef
--- a/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp	Fri Aug 30 20:39:38 2019 +0200
+++ b/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp	Mon Sep 02 19:42:46 2019 +0200
@@ -61,7 +61,7 @@
 inline traceid JfrTraceId::use(const Klass* klass) {
   assert(klass != NULL, "invariant");
   if (SHOULD_TAG(klass)) {
-    JfrTraceIdEpoch::set_klass_tagged_in_epoch();
+    JfrTraceIdEpoch::set_changed_tag_state();
     return set_used_and_get(klass);
   }
   assert(USED_THIS_EPOCH(klass), "invariant");
@@ -76,12 +76,20 @@
 inline traceid JfrTraceId::use(const Klass* klass, const Method* method) {
   assert(klass != NULL, "invariant");
   assert(method != NULL, "invariant");
-  SET_METHOD_FLAG_USED_THIS_EPOCH(method);
+  bool changed_tag_state = false;
   if (SHOULD_TAG_KLASS_METHOD(klass)) {
-    JfrTraceIdEpoch::set_klass_tagged_in_epoch();
     SET_METHOD_AND_CLASS_USED_THIS_EPOCH(klass);
+    changed_tag_state = true;
   }
   assert(METHOD_AND_CLASS_USED_THIS_EPOCH(klass), "invariant");
+  if (METHOD_FLAG_NOT_USED_THIS_EPOCH(method)) {
+    SET_METHOD_FLAG_USED_THIS_EPOCH(method);
+    changed_tag_state = true;
+  }
+  assert(METHOD_FLAG_USED_THIS_EPOCH(method), "invariant");
+  if (changed_tag_state) {
+    JfrTraceIdEpoch::set_changed_tag_state();
+  }
   return (METHOD_ID(klass, method));
 }
 
@@ -100,6 +108,13 @@
   return cld->is_unsafe_anonymous() ? 0 : set_used_and_get(cld);
 }
 
+inline void JfrTraceId::set_leakp(const Klass* klass, const Method* method) {
+  assert(METHOD_AND_CLASS_USED_THIS_EPOCH(klass), "invariant");
+  assert(METHOD_FLAG_USED_THIS_EPOCH(method), "invariant");
+  SET_LEAKP(klass);
+  SET_METHOD_LEAKP(method);
+}
+
 inline bool JfrTraceId::in_visible_set(const Klass* klass) {
   assert(klass != NULL, "invariant");
   assert(((JavaThread*)Thread::current())->thread_state() == _thread_in_vm, "invariant");