changeset 7372:ac8658da2a92

8062836: BACKOUT - Parallelize clearing the next mark bitmap Summary: Backing out due to non-trivial issues found in nightly testing Reviewed-by: mgerdin, mlarsson
author jwilhelm
date Wed, 05 Nov 2014 15:50:14 +0100
parents f18a1b5cbf0b
children d4f303d3104c
files src/share/vm/gc_implementation/g1/concurrentMark.cpp src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp
diffstat 2 files changed, 3 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Wed Nov 05 16:39:10 2014 +0100
+++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp	Wed Nov 05 15:50:14 2014 +0100
@@ -180,32 +180,9 @@
   }
 };
 
-class ParClearNextMarkBitmapTask : public AbstractGangTask {
-  ClearBitmapHRClosure* _cl;
-  HeapRegionClaimer     _hrclaimer;
-  bool                  _suspendible; // If the task is suspendible, workers must join the STS.
-
-public:
-  ParClearNextMarkBitmapTask(ClearBitmapHRClosure *cl, uint n_workers, bool suspendible) :
-      _cl(cl), _suspendible(suspendible), AbstractGangTask("Parallel Clear Bitmap Task"), _hrclaimer(n_workers) {}
-
-  void work(uint worker_id) {
-    if (_suspendible) {
-      SuspendibleThreadSet::join();
-    }
-    G1CollectedHeap::heap()->heap_region_par_iterate(_cl, worker_id, &_hrclaimer);
-    if (_suspendible) {
-      SuspendibleThreadSet::leave();
-    }
-  }
-};
-
 void CMBitMap::clearAll() {
-  G1CollectedHeap* g1h = G1CollectedHeap::heap();
   ClearBitmapHRClosure cl(NULL, this, false /* may_yield */);
-  uint n_workers = g1h->workers()->active_workers();
-  ParClearNextMarkBitmapTask task(&cl, n_workers, false);
-  g1h->workers()->run_task(&task);
+  G1CollectedHeap::heap()->heap_region_iterate(&cl);
   guarantee(cl.complete(), "Must have completed iteration.");
   return;
 }
@@ -884,8 +861,7 @@
   guarantee(!g1h->mark_in_progress(), "invariant");
 
   ClearBitmapHRClosure cl(this, _nextMarkBitMap, true /* may_yield */);
-  ParClearNextMarkBitmapTask task(&cl, parallel_marking_threads(), true);
-  _parallel_workers->run_task(&task);
+  g1h->heap_region_iterate(&cl);
 
   // Clear the liveness counting data. If the marking has been aborted, the abort()
   // call already did that.
--- a/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp	Wed Nov 05 16:39:10 2014 +0100
+++ b/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp	Wed Nov 05 15:50:14 2014 +0100
@@ -280,6 +280,7 @@
       // We may have aborted just before the remark. Do not bother clearing the
       // bitmap then, as it has been done during mark abort.
       if (!cm()->has_aborted()) {
+        SuspendibleThreadSetJoiner sts;
         _cm->clearNextBitmap();
       } else {
         assert(!G1VerifyBitmaps || _cm->nextMarkBitmapIsClear(), "Next mark bitmap must be clear");