# HG changeset patch # User ysr # Date 1213304555 25200 # Node ID 33e001c095fe9a23b682e4783fad24fa5ab2f375 # Parent 6aae2f9d0294a72637d8c0b00d57ef8823c4c277# Parent afc1ce1efe664525ddf08f6af49ba3da02d26bfb Merge diff -r 6aae2f9d0294 -r 33e001c095fe src/share/vm/gc_implementation/g1/concurrentMark.cpp --- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp Thu Jun 12 13:50:55 2008 -0700 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp Thu Jun 12 14:02:35 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())