# HG changeset patch # User jmasa # Date 1249265431 25200 # Node ID ff004bcd25960ffa048adc4d39ae4bf2e0a239b1 # Parent 7f807f55161a95fcb0a51327dd9eee8aed5a7613 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 diff -r 7f807f55161a -r ff004bcd2596 src/share/vm/memory/cardTableModRefBS.cpp --- 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