src/hotspot/share/gc/g1/g1HeapVerifier.cpp
changeset 50565 69e82329ad01
parent 49664 9a04cc89dde0
child 50752 9d62da00bf15
--- a/src/hotspot/share/gc/g1/g1HeapVerifier.cpp	Thu Jun 14 11:13:39 2018 +0100
+++ b/src/hotspot/share/gc/g1/g1HeapVerifier.cpp	Thu Jun 14 13:07:33 2018 +0200
@@ -315,6 +315,20 @@
     guarantee(!r->is_young() || r->rem_set()->is_complete(), "Remembered set for Young region %u must be complete, is %s", r->hrm_index(), r->rem_set()->get_state_str());
     // Humongous and old regions regions might be of any state, so can't check here.
     guarantee(!r->is_free() || !r->rem_set()->is_tracked(), "Remembered set for free region %u must be untracked, is %s", r->hrm_index(), r->rem_set()->get_state_str());
+    // Verify that the continues humongous regions' remembered set state matches the
+    // one from the starts humongous region.
+    if (r->is_continues_humongous()) {
+      if (r->rem_set()->get_state_str() != r->humongous_start_region()->rem_set()->get_state_str()) {
+         log_error(gc, verify)("Remset states differ: Region %u (%s) remset %s with starts region %u (%s) remset %s",
+                               r->hrm_index(),
+                               r->get_short_type_str(),
+                               r->rem_set()->get_state_str(),
+                               r->humongous_start_region()->hrm_index(),
+                               r->humongous_start_region()->get_short_type_str(),
+                               r->humongous_start_region()->rem_set()->get_state_str());
+         _failures = true;
+      }
+    }
     // For archive regions, verify there are no heap pointers to
     // non-pinned regions. For all others, verify liveness info.
     if (r->is_closed_archive()) {