changeset 8441:01a3646d1237

8080111: Remove SubTaskDone::_n_threads Reviewed-by: jmasa, kbarrett
author stefank
date Thu, 21 May 2015 09:23:46 +0200
parents 68c4b4b4fc86
children 678e64c3211a
files src/share/vm/gc/cms/parNewGeneration.cpp src/share/vm/gc/g1/g1CollectedHeap.cpp src/share/vm/gc/g1/g1RootProcessor.cpp src/share/vm/gc/g1/g1RootProcessor.hpp src/share/vm/gc/shared/genCollectedHeap.cpp src/share/vm/gc/shared/genCollectedHeap.hpp src/share/vm/gc/shared/workgroup.cpp src/share/vm/gc/shared/workgroup.hpp
diffstat 8 files changed, 13 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc/cms/parNewGeneration.cpp	Thu May 21 09:23:00 2015 +0200
+++ b/src/share/vm/gc/cms/parNewGeneration.cpp	Thu May 21 09:23:46 2015 +0200
@@ -580,10 +580,6 @@
 // active threads.
 void ParNewGenTask::set_for_termination(uint active_workers) {
   _state_set->reset(active_workers, _gen->promotion_failed());
-  // Should the heap be passed in?  There's only 1 for now so
-  // grab it instead.
-  GenCollectedHeap* gch = GenCollectedHeap::heap();
-  gch->set_n_termination(active_workers);
 }
 
 void ParNewGenTask::work(uint worker_id) {
--- a/src/share/vm/gc/g1/g1CollectedHeap.cpp	Thu May 21 09:23:00 2015 +0200
+++ b/src/share/vm/gc/g1/g1CollectedHeap.cpp	Thu May 21 09:23:46 2015 +0200
@@ -4326,7 +4326,6 @@
   ParallelTaskTerminator* terminator() { return &_terminator; }
 
   virtual void set_for_termination(uint active_workers) {
-    _root_processor->set_num_workers(active_workers);
     terminator()->reset_for_reuse(active_workers);
     _n_workers = active_workers;
   }
--- a/src/share/vm/gc/g1/g1RootProcessor.cpp	Thu May 21 09:23:00 2015 +0200
+++ b/src/share/vm/gc/g1/g1RootProcessor.cpp	Thu May 21 09:23:46 2015 +0200
@@ -204,7 +204,7 @@
     }
   }
 
-  _process_strong_tasks->all_tasks_completed();
+  _process_strong_tasks->all_tasks_completed(n_workers());
 }
 
 void G1RootProcessor::process_strong_roots(OopClosure* oops,
@@ -214,7 +214,7 @@
   process_java_roots(oops, clds, clds, NULL, blobs, NULL, 0);
   process_vm_roots(oops, NULL, NULL, 0);
 
-  _process_strong_tasks->all_tasks_completed();
+  _process_strong_tasks->all_tasks_completed(n_workers());
 }
 
 void G1RootProcessor::process_all_roots(OopClosure* oops,
@@ -228,7 +228,7 @@
     CodeCache::blobs_do(blobs);
   }
 
-  _process_strong_tasks->all_tasks_completed();
+  _process_strong_tasks->all_tasks_completed(n_workers());
 }
 
 void G1RootProcessor::process_java_roots(OopClosure* strong_roots,
@@ -327,14 +327,6 @@
   _g1h->g1_rem_set()->oops_into_collection_set_do(scan_rs, &scavenge_cs_nmethods, worker_i);
 }
 
-void G1RootProcessor::set_num_workers(uint active_workers) {
-  assert(active_workers == _srs.n_threads(),
-      err_msg("Mismatch between number of worker threads. active_workers: %u and n_workers(): %u",
-              active_workers,
-              _srs.n_threads()));
-  _process_strong_tasks->set_n_threads(active_workers);
-}
-
 uint G1RootProcessor::n_workers() const {
   return _srs.n_threads();
 }
--- a/src/share/vm/gc/g1/g1RootProcessor.hpp	Thu May 21 09:23:00 2015 +0200
+++ b/src/share/vm/gc/g1/g1RootProcessor.hpp	Thu May 21 09:23:46 2015 +0200
@@ -114,9 +114,6 @@
                             OopClosure* scan_non_heap_weak_roots,
                             uint worker_i);
 
-  // Inform SubTaskDone about the number of worker threads.
-  void set_num_workers(uint active_workers);
-
   // Number of worker threads used by the root processor.
   uint n_workers() const;
 };
--- a/src/share/vm/gc/shared/genCollectedHeap.cpp	Thu May 21 09:23:00 2015 +0200
+++ b/src/share/vm/gc/shared/genCollectedHeap.cpp	Thu May 21 09:23:46 2015 +0200
@@ -564,11 +564,6 @@
 void GenCollectedHeap::set_par_threads(uint t) {
   assert(t == 0 || !UseSerialGC, "Cannot have parallel threads");
   CollectedHeap::set_par_threads(t);
-  set_n_termination(t);
-}
-
-void GenCollectedHeap::set_n_termination(uint t) {
-  _process_strong_tasks->set_n_threads(t);
 }
 
 #ifdef ASSERT
@@ -709,7 +704,7 @@
     older_gens->reset_generation();
   }
 
-  _process_strong_tasks->all_tasks_completed();
+  _process_strong_tasks->all_tasks_completed(scope->n_threads());
 }
 
 
--- a/src/share/vm/gc/shared/genCollectedHeap.hpp	Thu May 21 09:23:00 2015 +0200
+++ b/src/share/vm/gc/shared/genCollectedHeap.hpp	Thu May 21 09:23:46 2015 +0200
@@ -365,7 +365,6 @@
   static GenCollectedHeap* heap();
 
   void set_par_threads(uint t);
-  void set_n_termination(uint t);
 
   // Invoke the "do_oop" method of one of the closures "not_older_gens"
   // or "older_gens" on root locations for the generation at
--- a/src/share/vm/gc/shared/workgroup.cpp	Thu May 21 09:23:00 2015 +0200
+++ b/src/share/vm/gc/shared/workgroup.cpp	Thu May 21 09:23:46 2015 +0200
@@ -434,7 +434,7 @@
 // SubTasksDone functions.
 
 SubTasksDone::SubTasksDone(uint n) :
-  _n_tasks(n), _n_threads(1), _tasks(NULL) {
+  _n_tasks(n), _tasks(NULL) {
   _tasks = NEW_C_HEAP_ARRAY(uint, n, mtInternal);
   guarantee(_tasks != NULL, "alloc failure");
   clear();
@@ -444,12 +444,6 @@
   return _tasks != NULL;
 }
 
-void SubTasksDone::set_n_threads(uint t) {
-  assert(_claimed == 0 || _threads_completed == _n_threads,
-         "should not be called while tasks are being processed!");
-  _n_threads = (t == 0 ? 1 : t);
-}
-
 void SubTasksDone::clear() {
   for (uint i = 0; i < _n_tasks; i++) {
     _tasks[i] = 0;
@@ -477,7 +471,7 @@
   return res;
 }
 
-void SubTasksDone::all_tasks_completed() {
+void SubTasksDone::all_tasks_completed(uint n_threads) {
   jint observed = _threads_completed;
   jint old;
   do {
@@ -485,7 +479,10 @@
     observed = Atomic::cmpxchg(old+1, &_threads_completed, old);
   } while (observed != old);
   // If this was the last thread checking in, clear the tasks.
-  if (observed+1 == (jint)_n_threads) clear();
+  uint adjusted_thread_count = (n_threads == 0 ? 1 : n_threads);
+  if (observed + 1 == (jint)adjusted_thread_count) {
+    clear();
+  }
 }
 
 
--- a/src/share/vm/gc/shared/workgroup.hpp	Thu May 21 09:23:00 2015 +0200
+++ b/src/share/vm/gc/shared/workgroup.hpp	Thu May 21 09:23:46 2015 +0200
@@ -390,12 +390,6 @@
 class SubTasksDone: public CHeapObj<mtInternal> {
   uint* _tasks;
   uint _n_tasks;
-  // _n_threads is used to determine when a sub task is done.
-  // It does not control how many threads will execute the subtask
-  // but must be initialized to the number that do execute the task
-  // in order to correctly decide when the subtask is done (all the
-  // threads working on the task have finished).
-  uint _n_threads;
   uint _threads_completed;
 #ifdef ASSERT
   volatile uint _claimed;
@@ -413,11 +407,6 @@
   // True iff the object is in a valid state.
   bool valid();
 
-  // Get/set the number of parallel threads doing the tasks to "t".  Can only
-  // be called before tasks start or after they are complete.
-  uint n_threads() { return _n_threads; }
-  void set_n_threads(uint t);
-
   // Returns "false" if the task "t" is unclaimed, and ensures that task is
   // claimed.  The task "t" is required to be within the range of "this".
   bool is_task_claimed(uint t);
@@ -426,7 +415,9 @@
   // tasks that it will try to claim.  Every thread in the parallel task
   // must execute this.  (When the last thread does so, the task array is
   // cleared.)
-  void all_tasks_completed();
+  //
+  // n_threads - Number of threads executing the sub-tasks.
+  void all_tasks_completed(uint n_threads);
 
   // Destructor.
   ~SubTasksDone();