src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp
changeset 55053 d58e1a447d2b
parent 54964 ec7d6d8effc7
child 58154 060d9d139109
child 58863 c16ac7a2eba4
--- a/src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp	Tue May 28 06:42:32 2019 -0400
+++ b/src/hotspot/share/jfr/recorder/storage/jfrStorage.cpp	Tue May 28 13:28:48 2019 +0200
@@ -312,7 +312,11 @@
 
 static bool insert_full_age_node(JfrAgeNode* age_node, JfrStorageAgeMspace* age_mspace, Thread* thread) {
   assert(JfrBuffer_lock->owned_by_self(), "invariant");
+  assert(age_node != NULL, "invariant");
+  assert(age_node->acquired_by_self(), "invariant");
   assert(age_node->retired_buffer()->retired(), "invariant");
+  age_node->release(); // drop identity claim on age node when inserting to full list
+  assert(age_node->identity() == NULL, "invariant");
   age_mspace->insert_full_head(age_node);
   return true;
 }
@@ -329,8 +333,8 @@
       return false;
     }
   }
+  assert(age_node != NULL, "invariant");
   assert(age_node->acquired_by_self(), "invariant");
-  assert(age_node != NULL, "invariant");
   age_node->set_retired_buffer(buffer);
   control.increment_full();
   return insert_full_age_node(age_node, age_mspace, thread);
@@ -412,6 +416,7 @@
       if (oldest_age_node == NULL) {
         break;
       }
+      assert(oldest_age_node->identity() == NULL, "invariant");
       BufferPtr const buffer = oldest_age_node->retired_buffer();
       assert(buffer->retired(), "invariant");
       discarded_size += buffer->unflushed_size();
@@ -423,7 +428,7 @@
       } else {
         mspace_release_full(oldest_age_node, _age_mspace);
         buffer->reinitialize();
-        buffer->release(); // pusb
+        buffer->release(); // publish
         break;
       }
     }
@@ -637,12 +642,12 @@
   JfrAgeNode* last = NULL;
   while (node != NULL) {
     last = node;
+    assert(node->identity() == NULL, "invariant");
     BufferPtr const buffer = node->retired_buffer();
     assert(buffer != NULL, "invariant");
     assert(buffer->retired(), "invariant");
     processor.process(buffer);
     // at this point, buffer is already live or destroyed
-    node->clear_identity();
     JfrAgeNode* const next = (JfrAgeNode*)node->next();
     if (node->transient()) {
       // detach