Mercurial > hg > graal-compiler
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 ? |