1.1 --- a/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Thu Sep 22 07:18:51 2011 -0400 1.2 +++ b/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Thu Sep 22 10:57:37 2011 -0700 1.3 @@ -62,6 +62,8 @@ 1.4 // hook up weak ref data so it can be used during Mark-Sweep 1.5 assert(GenMarkSweep::ref_processor() == NULL, "no stomping"); 1.6 assert(rp != NULL, "should be non-NULL"); 1.7 + assert(rp == G1CollectedHeap::heap()->ref_processor_stw(), "Precondition"); 1.8 + 1.9 GenMarkSweep::_ref_processor = rp; 1.10 rp->setup_policy(clear_all_softrefs); 1.11 1.12 @@ -139,6 +141,8 @@ 1.13 1.14 // Process reference objects found during marking 1.15 ReferenceProcessor* rp = GenMarkSweep::ref_processor(); 1.16 + assert(rp == G1CollectedHeap::heap()->ref_processor_stw(), "Sanity"); 1.17 + 1.18 rp->setup_policy(clear_all_softrefs); 1.19 rp->process_discovered_references(&GenMarkSweep::is_alive, 1.20 &GenMarkSweep::keep_alive, 1.21 @@ -166,7 +170,6 @@ 1.22 GenMarkSweep::follow_mdo_weak_refs(); 1.23 assert(GenMarkSweep::_marking_stack.is_empty(), "just drained"); 1.24 1.25 - 1.26 // Visit interned string tables and delete unmarked oops 1.27 StringTable::unlink(&GenMarkSweep::is_alive); 1.28 // Clean up unreferenced symbols in symbol table. 1.29 @@ -346,7 +349,8 @@ 1.30 NULL, // do not touch code cache here 1.31 &GenMarkSweep::adjust_pointer_closure); 1.32 1.33 - g1h->ref_processor()->weak_oops_do(&GenMarkSweep::adjust_root_pointer_closure); 1.34 + assert(GenMarkSweep::ref_processor() == g1h->ref_processor_stw(), "Sanity"); 1.35 + g1h->ref_processor_stw()->weak_oops_do(&GenMarkSweep::adjust_root_pointer_closure); 1.36 1.37 // Now adjust pointers in remaining weak roots. (All of which should 1.38 // have been cleared if they pointed to non-surviving objects.)