comparison src/share/vm/gc_implementation/g1/g1RemSet.cpp @ 3983:811ec3d0833b

7097053: G1: assert(da ? referent->is_oop() : referent->is_oop_or_null()) failed: referenceProcessor.cpp:1054 Summary: During remembered set scanning, the reference processor could discover a reference object whose referent was in the process of being copied and so may not be completely initialized. Do not perform reference discovery during remembered set scanning. Reviewed-by: tonyp, ysr
author johnc
date Mon, 03 Oct 2011 12:49:53 -0700
parents 4dfb2df418f2
children c6a6e936dc68
comparison
equal deleted inserted replaced
3982:273b46400613 3983:811ec3d0833b
466 // Scan oops in the card looking for references into the collection set 466 // Scan oops in the card looking for references into the collection set
467 HeapWord* end = _ct_bs->addr_for(card_ptr + 1); 467 HeapWord* end = _ct_bs->addr_for(card_ptr + 1);
468 MemRegion scanRegion(start, end); 468 MemRegion scanRegion(start, end);
469 469
470 UpdateRSetImmediate update_rs_cl(_g1->g1_rem_set()); 470 UpdateRSetImmediate update_rs_cl(_g1->g1_rem_set());
471 FilterIntoCSClosure update_rs_cset_oop_cl(NULL, _g1, &update_rs_cl, NULL /* rp */); 471 FilterIntoCSClosure update_rs_cset_oop_cl(NULL, _g1, &update_rs_cl);
472 FilterOutOfRegionClosure filter_then_update_rs_cset_oop_cl(r, &update_rs_cset_oop_cl); 472 FilterOutOfRegionClosure filter_then_update_rs_cset_oop_cl(r, &update_rs_cset_oop_cl);
473 473
474 // We can pass false as the "filter_young" parameter here as: 474 // We can pass false as the "filter_young" parameter here as:
475 // * we should be in a STW pause, 475 // * we should be in a STW pause,
476 // * the DCQS to which this closure is applied is used to hold 476 // * the DCQS to which this closure is applied is used to hold
642 check_for_refs_into_cset, 642 check_for_refs_into_cset,
643 worker_i); 643 worker_i);
644 update_rs_oop_cl.set_from(r); 644 update_rs_oop_cl.set_from(r);
645 645
646 TriggerClosure trigger_cl; 646 TriggerClosure trigger_cl;
647 FilterIntoCSClosure into_cs_cl(NULL, _g1, &trigger_cl, NULL /* rp */); 647 FilterIntoCSClosure into_cs_cl(NULL, _g1, &trigger_cl);
648 InvokeIfNotTriggeredClosure invoke_cl(&trigger_cl, &into_cs_cl); 648 InvokeIfNotTriggeredClosure invoke_cl(&trigger_cl, &into_cs_cl);
649 Mux2Closure mux(&invoke_cl, &update_rs_oop_cl); 649 Mux2Closure mux(&invoke_cl, &update_rs_oop_cl);
650 650
651 FilterOutOfRegionClosure filter_then_update_rs_oop_cl(r, 651 FilterOutOfRegionClosure filter_then_update_rs_oop_cl(r,
652 (check_for_refs_into_cset ? 652 (check_for_refs_into_cset ?