# HG changeset patch # User pliden # Date 1402659966 -7200 # Node ID a45a4f5a9609de50600d466f68904fe9941c31fe # Parent a07a3a29df675c23a970d919b654220204193f9a 8044796: G1: Enable G1CollectedHeap::stop() Reviewed-by: brutisso, sjohanss diff -r a07a3a29df67 -r a45a4f5a9609 src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri Jun 13 17:07:39 2014 -0400 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Fri Jun 13 13:46:06 2014 +0200 @@ -432,14 +432,6 @@ return hr; } -void G1CollectedHeap::stop_conc_gc_threads() { - _cg1r->stop(); - _cmThread->stop(); - if (G1StringDedup::is_enabled()) { - G1StringDedup::stop(); - } -} - #ifdef ASSERT // A region is added to the collection set as it is retired // so an address p can point to a region which will be in the @@ -2186,20 +2178,14 @@ } void G1CollectedHeap::stop() { -#if 0 - // Stopping concurrent worker threads is currently disabled until - // some bugs in concurrent mark has been resolve. Without fixing - // those bugs first we risk haning during VM exit when trying to - // stop these threads. - - // Abort any ongoing concurrent root region scanning and stop all - // concurrent threads. We do this to make sure these threads do - // not continue to execute and access resources (e.g. gclog_or_tty) + // Stop all concurrent threads. We do this to make sure these threads + // do not continue to execute and access resources (e.g. gclog_or_tty) // that are destroyed during shutdown. - _cm->root_regions()->abort(); - _cm->root_regions()->wait_until_scan_finished(); - stop_conc_gc_threads(); -#endif + _cg1r->stop(); + _cmThread->stop(); + if (G1StringDedup::is_enabled()) { + G1StringDedup::stop(); + } } size_t G1CollectedHeap::conservative_max_heap_alignment() { diff -r a07a3a29df67 -r a45a4f5a9609 src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp --- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Fri Jun 13 17:07:39 2014 -0400 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Fri Jun 13 13:46:06 2014 +0200 @@ -1699,8 +1699,6 @@ void print_all_rsets() PRODUCT_RETURN; public: - void stop_conc_gc_threads(); - size_t pending_card_num(); size_t cards_scanned(); diff -r a07a3a29df67 -r a45a4f5a9609 src/share/vm/runtime/java.cpp --- a/src/share/vm/runtime/java.cpp Fri Jun 13 17:07:39 2014 -0400 +++ b/src/share/vm/runtime/java.cpp Fri Jun 13 13:46:06 2014 +0200 @@ -497,9 +497,6 @@ os::infinite_sleep(); } - // Stop any ongoing concurrent GC work - Universe::heap()->stop(); - // Terminate watcher thread - must before disenrolling any periodic task if (PeriodicTask::num_tasks() > 0) WatcherThread::stop(); @@ -514,10 +511,8 @@ StatSampler::disengage(); StatSampler::destroy(); - // We do not need to explicitly stop concurrent GC threads because the - // JVM will be taken down at a safepoint when such threads are inactive -- - // except for some concurrent G1 threads, see (comment in) - // Threads::destroy_vm(). + // Stop concurrent GC threads + Universe::heap()->stop(); // Print GC/heap related information. if (PrintGCDetails) { diff -r a07a3a29df67 -r a45a4f5a9609 src/share/vm/runtime/thread.cpp --- a/src/share/vm/runtime/thread.cpp Fri Jun 13 17:07:39 2014 -0400 +++ b/src/share/vm/runtime/thread.cpp Fri Jun 13 13:46:06 2014 +0200 @@ -4013,14 +4013,8 @@ // GC vm_operations can get caught at the safepoint, and the // heap is unparseable if they are caught. Grab the Heap_lock // to prevent this. The GC vm_operations will not be able to - // queue until after the vm thread is dead. - // After this point, we'll never emerge out of the safepoint before - // the VM exits, so concurrent GC threads do not need to be explicitly - // stopped; they remain inactive until the process exits. - // Note: some concurrent G1 threads may be running during a safepoint, - // but these will not be accessing the heap, just some G1-specific side - // data structures that are not accessed by any other threads but them - // after this point in a terminal safepoint. + // queue until after the vm thread is dead. After this point, + // we'll never emerge out of the safepoint before the VM exits. MutexLocker ml(Heap_lock);