< prev index next >
src/share/vm/gc/g1/g1ConcurrentMark.cpp
Print this page
rev 11459 : create_thread_failed: fix errors from thread creation failures
rev 11460 : refactor: switch to update_active_threads()
@@ -1031,15 +1031,18 @@
"Maximum number of marking threads exceeded");
uint active_workers = MAX2(1U, parallel_marking_threads());
assert(active_workers > 0, "Should have been set");
+ // Setting active workers is not guaranteed since fewer
+ // worker threads may currently exist and more may not be
+ // available.
+ active_workers = _parallel_workers->update_active_workers(active_workers);
// Parallel task terminator is set in "set_concurrency_and_phase()"
set_concurrency_and_phase(active_workers, true /* concurrent */);
G1CMConcurrentMarkingTask markingTask(this, cmThread());
- _parallel_workers->set_active_workers(active_workers);
_parallel_workers->run_task(&markingTask);
print_stats();
}
void G1ConcurrentMark::checkpointRootsFinal(bool clear_all_soft_refs) {
< prev index next >