changeset 10634:70081cb6cc16

8151336: Root region scanning should be cancelled and disabled when the ConcurrentMarkThread::run_service() exits Reviewed-by: pliden, tschatzl
author brutisso
date Wed, 16 Mar 2016 13:38:54 +0100
parents c4b391039f9f
children 9d93b077b22f
files src/share/vm/gc/g1/concurrentMarkThread.cpp src/share/vm/gc/g1/g1CollectedHeap.cpp
diffstat 2 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc/g1/concurrentMarkThread.cpp	Wed Mar 16 10:28:57 2016 +0100
+++ b/src/share/vm/gc/g1/concurrentMarkThread.cpp	Wed Mar 16 13:38:54 2016 +0100
@@ -115,7 +115,6 @@
     // wait until started is set.
     sleepBeforeNextCycle();
     if (should_terminate()) {
-      _cm->root_regions()->cancel_scan();
       break;
     }
 
@@ -282,6 +281,7 @@
       g1h->register_concurrent_cycle_end();
     }
   }
+  _cm->root_regions()->cancel_scan();
 }
 
 void ConcurrentMarkThread::stop_service() {
--- a/src/share/vm/gc/g1/g1CollectedHeap.cpp	Wed Mar 16 10:28:57 2016 +0100
+++ b/src/share/vm/gc/g1/g1CollectedHeap.cpp	Wed Mar 16 13:38:54 2016 +0100
@@ -3222,10 +3222,13 @@
   _verifier->verify_region_sets_optional();
   _verifier->verify_dirty_young_regions();
 
-  // This call will decide whether this pause is an initial-mark
-  // pause. If it is, during_initial_mark_pause() will return true
-  // for the duration of this pause.
-  g1_policy()->decide_on_conc_mark_initiation();
+  // We should not be doing initial mark unless the conc mark thread is running
+  if (!_cmThread->should_terminate()) {
+    // This call will decide whether this pause is an initial-mark
+    // pause. If it is, during_initial_mark_pause() will return true
+    // for the duration of this pause.
+    g1_policy()->decide_on_conc_mark_initiation();
+  }
 
   // We do not allow initial-mark to be piggy-backed on a mixed GC.
   assert(!collector_state()->during_initial_mark_pause() ||