7114303: G1: assert(_g1->mark_in_progress()) failed: shouldn't be here otherwise
Race between the VM thread reading G1CollectedHeap::_mark_in_progress and it being set by the concurrent mark thread when concurrent marking is aborted by a full GC. Have the concurrent mark thread join the SuspendibleThreadSet before changing the marking state. Reviewed-by: tonyp, brutisso
This commit is contained in:
parent
15070123fa
commit
861168c82e
@ -191,7 +191,11 @@ void ConcurrentMarkThread::run() {
|
||||
VM_CGC_Operation op(&cl_cl, verbose_str);
|
||||
VMThread::execute(&op);
|
||||
} else {
|
||||
// We don't want to update the marking status if a GC pause
|
||||
// is already underway.
|
||||
_sts.join();
|
||||
g1h->set_marking_complete();
|
||||
_sts.leave();
|
||||
}
|
||||
|
||||
// Check if cleanup set the free_regions_coming flag. If it
|
||||
|
@ -946,10 +946,9 @@ void G1CollectorPolicy::record_collection_pause_start(double start_time_sec,
|
||||
_cur_aux_times_set[i] = false;
|
||||
}
|
||||
|
||||
// These are initialized to zero here and they are set during
|
||||
// This is initialized to zero here and is set during
|
||||
// the evacuation pause if marking is in progress.
|
||||
_cur_satb_drain_time_ms = 0.0;
|
||||
_last_satb_drain_processed_buffers = 0;
|
||||
|
||||
_last_young_gc_full = false;
|
||||
|
||||
@ -1367,7 +1366,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
|
||||
|
||||
if (print_marking_info) {
|
||||
print_stats(1, "SATB Drain Time", _cur_satb_drain_time_ms);
|
||||
print_stats(2, "Processed Buffers", _last_satb_drain_processed_buffers);
|
||||
}
|
||||
|
||||
if (parallel) {
|
||||
|
@ -534,7 +534,6 @@ private:
|
||||
double sum_of_values (double* data);
|
||||
double max_sum (double* data1, double* data2);
|
||||
|
||||
int _last_satb_drain_processed_buffers;
|
||||
double _last_pause_time_ms;
|
||||
|
||||
size_t _bytes_in_collection_set_before_gc;
|
||||
@ -774,11 +773,6 @@ public:
|
||||
_cur_satb_drain_time_ms = ms;
|
||||
}
|
||||
|
||||
void record_satb_drain_processed_buffers(int processed_buffers) {
|
||||
assert(_g1->mark_in_progress(), "shouldn't be here otherwise");
|
||||
_last_satb_drain_processed_buffers = processed_buffers;
|
||||
}
|
||||
|
||||
void record_update_rs_time(int thread, double ms) {
|
||||
_par_last_update_rs_times_ms[thread] = ms;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user