< prev index next >

src/share/vm/gc/g1/g1ConcurrentMark.cpp

Print this page

        

*** 370,393 **** assert(res == NULL || res->is_survivor(), "post-condition"); return res; } void G1CMRootRegions::scan_finished() { assert(scan_in_progress(), "pre-condition"); // Currently, only survivors can be root regions. if (!_should_abort) { assert(_next_survivor == NULL, "we should have claimed all survivors"); } _next_survivor = NULL; ! { ! MutexLockerEx x(RootRegionScan_lock, Mutex::_no_safepoint_check_flag); ! _scan_in_progress = false; ! RootRegionScan_lock->notify_all(); ! } } bool G1CMRootRegions::wait_until_scan_finished() { if (!scan_in_progress()) return false; --- 370,399 ---- assert(res == NULL || res->is_survivor(), "post-condition"); return res; } + void G1CMRootRegions::notify_scan_done() { + MutexLockerEx x(RootRegionScan_lock, Mutex::_no_safepoint_check_flag); + _scan_in_progress = false; + RootRegionScan_lock->notify_all(); + } + + void G1CMRootRegions::cancel_scan() { + notify_scan_done(); + } + void G1CMRootRegions::scan_finished() { assert(scan_in_progress(), "pre-condition"); // Currently, only survivors can be root regions. if (!_should_abort) { assert(_next_survivor == NULL, "we should have claimed all survivors"); } _next_survivor = NULL; ! notify_scan_done(); } bool G1CMRootRegions::wait_until_scan_finished() { if (!scan_in_progress()) return false;
*** 976,992 **** } } }; void G1ConcurrentMark::scanRootRegions() { - // Start of concurrent marking. - ClassLoaderDataGraph::clear_claimed_marks(); - // scan_in_progress() will have been set to true only if there was // at least one root region to scan. So, if it's false, we // should not attempt to do any further work. if (root_regions()->scan_in_progress()) { GCTraceConcTime(Info, gc) tt("Concurrent Root Region Scan"); _parallel_marking_threads = calc_parallel_marking_threads(); assert(parallel_marking_threads() <= max_parallel_marking_threads(), "Maximum number of marking threads exceeded"); --- 982,996 ---- } } }; void G1ConcurrentMark::scanRootRegions() { // scan_in_progress() will have been set to true only if there was // at least one root region to scan. So, if it's false, we // should not attempt to do any further work. if (root_regions()->scan_in_progress()) { + assert(!has_aborted(), "Aborting before root region scanning is finished not supported."); GCTraceConcTime(Info, gc) tt("Concurrent Root Region Scan"); _parallel_marking_threads = calc_parallel_marking_threads(); assert(parallel_marking_threads() <= max_parallel_marking_threads(), "Maximum number of marking threads exceeded");
< prev index next >