src/hotspot/share/memory/metaspace/rootChunkArea.cpp
branchstuefe-new-metaspace-branch
changeset 58227 0e7d9a23261e
parent 58099 5aeb07390c74
child 58683 2d5dd194c65c
--- a/src/hotspot/share/memory/metaspace/rootChunkArea.cpp	Wed Sep 18 07:46:02 2019 +0200
+++ b/src/hotspot/share/memory/metaspace/rootChunkArea.cpp	Thu Sep 19 15:21:27 2019 +0200
@@ -32,6 +32,7 @@
 #include "memory/metaspace/metachunk.hpp"
 #include "memory/metaspace/metaspaceCommon.hpp"
 #include "memory/metaspace/rootChunkArea.hpp"
+#include "runtime/mutexLocker.hpp"
 #include "utilities/debug.hpp"
 #include "utilities/globalDefinitions.hpp"
 
@@ -422,6 +423,8 @@
 
 void RootChunkArea::verify(bool slow) const {
 
+  assert_lock_strong(MetaspaceExpand_lock);
+
   assert_is_aligned(_base, chklvl::MAX_CHUNK_BYTE_SIZE);
 
   // Iterate thru all chunks in this area. They must be ordered correctly,
@@ -433,7 +436,6 @@
     assrt_(_first_chunk->prev_in_vs() == NULL, "Sanity");
 
     const Metachunk* c = _first_chunk;
-    const Metachunk* c_last = NULL;
     const MetaWord* expected_next_base = _base;
     const MetaWord* const area_end = _base + word_size();
 
@@ -450,37 +452,10 @@
       assrt_(is_aligned(c->base(), c->word_size()),
              "misaligned chunk %d " METACHUNK_FORMAT ".", num_chunk, METACHUNK_FORMAT_ARGS(c));
 
-      const Metachunk* const successor = c->next_in_vs();
-      if (successor != NULL) {
-        assrt_(successor->prev_in_vs() == c,
-               "Chunk No. %d " METACHUNK_FORMAT " - vs link to successor " METACHUNK_FORMAT " broken.", num_chunk,
-               METACHUNK_FORMAT_ARGS(c), METACHUNK_FORMAT_ARGS(successor));
-        assrt_(c->end() == successor->base(),
-               "areas between neighbor chunks do not connect: "
-               "this chunk %d " METACHUNK_FORMAT " and successor chunk %d " METACHUNK_FORMAT ".",
-               num_chunk, METACHUNK_FORMAT_ARGS(c), num_chunk + 1, METACHUNK_FORMAT_ARGS(successor));
-      }
-
-      if (c_last != NULL) {
-        assrt_(c->prev_in_vs() == c_last,
-               "Chunk No. %d " METACHUNK_FORMAT " - vs backlink invalid.", num_chunk, METACHUNK_FORMAT_ARGS(c));
-        assrt_(c_last->end() == c->base(),
-               "areas between neighbor chunks do not connect: "
-               "previous chunk %d " METACHUNK_FORMAT " and this chunk %d " METACHUNK_FORMAT ".",
-               num_chunk - 1, METACHUNK_FORMAT_ARGS(c_last), num_chunk, METACHUNK_FORMAT_ARGS(c));
-      } else {
-        assrt_(c->prev_in_vs() == NULL,
-               "unexpected back link: chunk %d " METACHUNK_FORMAT ".",
-               num_chunk, METACHUNK_FORMAT_ARGS(c));
-        assrt_(c == _first_chunk,
-            "should be first: chunk %d " METACHUNK_FORMAT ".",
-            num_chunk, METACHUNK_FORMAT_ARGS(c));
-      }
-
-      c->verify(slow); // <- also checks alignment and level etc
+      c->verify_neighborhood();
+      c->verify(slow);
 
       expected_next_base = c->end();
-      c_last = c;
       num_chunk ++;
 
       c = c->next_in_vs();
@@ -492,6 +467,9 @@
 }
 
 void RootChunkArea::verify_area_is_ideally_merged() const {
+
+  assert_lock_strong(MetaspaceExpand_lock);
+
   int num_chunk = 0;
   for (const Metachunk* c = _first_chunk; c != NULL; c = c->next_in_vs()) {
     if (!c->is_root_chunk() && c->is_free()) {