changeset 887:ff004bcd2596

6843292: "Expect to be beyond new region unless impacting another region" assertion too strong Summary: In the assertion allow for collision with the guard page. Reviewed-by: tonyp, ysr, jcoomes
author jmasa
date Sun, 02 Aug 2009 19:10:31 -0700
parents 7f807f55161a
children 59726d16b30d
files src/share/vm/memory/cardTableModRefBS.cpp
diffstat 1 files changed, 11 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/memory/cardTableModRefBS.cpp	Fri Jul 31 10:41:29 2009 -0700
+++ b/src/share/vm/memory/cardTableModRefBS.cpp	Sun Aug 02 19:10:31 2009 -0700
@@ -253,8 +253,16 @@
     }
 #endif
     // The guard page is always committed and should not be committed over.
-    HeapWord* const new_end_for_commit = MIN2(new_end_aligned,
-                                              _guard_region.start());
+    // "guarded" is used for assertion checking below and recalls the fact
+    // that the would-be end of the new committed region would have
+    // penetrated the guard page.
+    HeapWord* new_end_for_commit = new_end_aligned;
+
+    DEBUG_ONLY(bool guarded = false;)
+    if (new_end_for_commit > _guard_region.start()) {
+      new_end_for_commit = _guard_region.start();
+      DEBUG_ONLY(guarded = true;)
+    }
 
     if (new_end_for_commit > cur_committed.end()) {
       // Must commit new pages.
@@ -302,7 +310,7 @@
     // not the aligned up expanded region.
     // jbyte* const end = byte_after(new_region.last());
     jbyte* const end = (jbyte*) new_end_for_commit;
-    assert((end >= byte_after(new_region.last())) || collided,
+    assert((end >= byte_after(new_region.last())) || collided || guarded,
       "Expect to be beyond new region unless impacting another region");
     // do nothing if we resized downward.
 #ifdef ASSERT