changeset 345:33e001c095fe

Merge
author ysr
date Thu, 12 Jun 2008 14:02:35 -0700
parents 6aae2f9d0294 afc1ce1efe66
children bb254e57d2f4
files
diffstat 1 files changed, 10 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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())