< 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 >