# HG changeset patch # User iveresov # Date 1213186339 25200 # Node ID afc1ce1efe664525ddf08f6af49ba3da02d26bfb # Parent 37f87013dfd831979f18702ebddc42cceeb2b445 6710665: G1: guarantee(_cm->out_of_regions() && _cm->region_stack_empty() && _task_queue->size() == 0, ...) Summary: Remove the incorrect assumptions from guarantee()s. Reviewed-by: ysr, tonyp diff -r 37f87013dfd8 -r afc1ce1efe66 src/share/vm/gc_implementation/g1/concurrentMark.cpp --- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp Thu Jun 05 15:57:56 2008 -0700 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp Wed Jun 11 05:12:19 2008 -0700 @@ -3751,8 +3751,10 @@ if (!has_aborted()) { // We cannot check whether the global stack is empty, since other - // tasks might be pushing objects to it concurrently. - tmp_guarantee_CM( _cm->out_of_regions() && _cm->region_stack_empty(), + // tasks might be pushing objects to it concurrently. We also cannot + // check if the region stack is empty because if a thread is aborting + // it can push a partially done region back. + tmp_guarantee_CM( _cm->out_of_regions(), "at this point we should be out of regions" ); if (_cm->verbose_low()) @@ -3774,9 +3776,10 @@ // we could. Let's try to do some stealing... // We cannot check whether the global stack is empty, since other - // tasks might be pushing objects to it concurrently. + // tasks might be pushing objects to it concurrently. We also cannot + // check if the region stack is empty because if a thread is aborting + // it can push a partially done region back. guarantee( _cm->out_of_regions() && - _cm->region_stack_empty() && _task_queue->size() == 0, "only way to reach here" ); if (_cm->verbose_low()) @@ -3811,9 +3814,10 @@ // termination protocol. if (!has_aborted()) { // We cannot check whether the global stack is empty, since other - // tasks might be concurrently pushing objects on it. + // tasks might be concurrently pushing objects on it. We also cannot + // check if the region stack is empty because if a thread is aborting + // it can push a partially done region back. guarantee( _cm->out_of_regions() && - _cm->region_stack_empty() && _task_queue->size() == 0, "only way to reach here" ); if (_cm->verbose_low())