hotspot/src/share/vm/memory/space.cpp
changeset 1894 5c343868d071
parent 1893 c82e388e17c5
child 2105 347008ce7984
--- a/hotspot/src/share/vm/memory/space.cpp	Tue Jan 06 07:05:05 2009 -0800
+++ b/hotspot/src/share/vm/memory/space.cpp	Sun Jan 11 16:58:24 2009 -0800
@@ -569,7 +569,15 @@
   if (prev > mr.start()) {
     region_start_addr = prev;
     blk_start_addr    = prev;
-    assert(blk_start_addr == block_start(region_start_addr), "invariant");
+    // The previous invocation may have pushed "prev" beyond the
+    // last allocated block yet there may be still be blocks
+    // in this region due to a particular coalescing policy.
+    // Relax the assertion so that the case where the unallocated
+    // block is maintained and "prev" is beyond the unallocated
+    // block does not cause the assertion to fire.
+    assert((BlockOffsetArrayUseUnallocatedBlock &&
+            (!is_in(prev))) ||
+           (blk_start_addr == block_start(region_start_addr)), "invariant");
   } else {
     region_start_addr = mr.start();
     blk_start_addr    = block_start(region_start_addr);