347 // is updated immediately. |
347 // is updated immediately. |
348 DirtyCardQueue into_cset_dcq(&_g1->into_cset_dirty_card_queue_set()); |
348 DirtyCardQueue into_cset_dcq(&_g1->into_cset_dirty_card_queue_set()); |
349 |
349 |
350 assert((ParallelGCThreads > 0) || worker_i == 0, "invariant"); |
350 assert((ParallelGCThreads > 0) || worker_i == 0, "invariant"); |
351 |
351 |
352 // The two flags below were introduced temporarily to serialize |
352 updateRS(&into_cset_dcq, worker_i); |
353 // the updating and scanning of remembered sets. There are some |
353 scanRS(oc, code_root_cl, worker_i); |
354 // race conditions when these two operations are done in parallel |
|
355 // and they are causing failures. When we resolve said race |
|
356 // conditions, we'll revert back to parallel remembered set |
|
357 // updating and scanning. See CRs 6677707 and 6677708. |
|
358 if (G1UseParallelRSetUpdating || (worker_i == 0)) { |
|
359 updateRS(&into_cset_dcq, worker_i); |
|
360 } else { |
|
361 _g1p->phase_times()->record_update_rs_processed_buffers(worker_i, 0); |
|
362 _g1p->phase_times()->record_update_rs_time(worker_i, 0.0); |
|
363 } |
|
364 if (G1UseParallelRSetScanning || (worker_i == 0)) { |
|
365 scanRS(oc, code_root_cl, worker_i); |
|
366 } else { |
|
367 _g1p->phase_times()->record_scan_rs_time(worker_i, 0.0); |
|
368 } |
|
369 |
354 |
370 // We now clear the cached values of _cset_rs_update_cl for this worker |
355 // We now clear the cached values of _cset_rs_update_cl for this worker |
371 _cset_rs_update_cl[worker_i] = NULL; |
356 _cset_rs_update_cl[worker_i] = NULL; |
372 } |
357 } |
373 |
358 |