60 assert(from == NULL || from->is_in_reserved(p), "p is not in from"); |
60 assert(from == NULL || from->is_in_reserved(p), "p is not in from"); |
61 |
61 |
62 HeapRegion* to = _g1->heap_region_containing(obj); |
62 HeapRegion* to = _g1->heap_region_containing(obj); |
63 // The test below could be optimized by applying a bit op to to and from. |
63 // The test below could be optimized by applying a bit op to to and from. |
64 if (to != NULL && from != NULL && from != to) { |
64 if (to != NULL && from != NULL && from != to) { |
65 // The _par_traversal_in_progress flag is true during the collection pause, |
65 // The _traversal_in_progress flag is true during the collection pause, |
66 // false during the evacuation failure handing. This should avoid a |
66 // false during the evacuation failure handling. This should avoid a |
67 // potential loop if we were to add the card containing 'p' to the DCQS |
67 // potential loop if we were to add the card containing 'p' to the DCQS |
68 // that's used to regenerate the remembered sets for the collection set, |
68 // that's used to regenerate the remembered sets for the collection set, |
69 // in the event of an evacuation failure, here. The UpdateRSImmediate |
69 // in the event of an evacuation failure, here. The UpdateRSImmediate |
70 // closure will eventally call this routine. |
70 // closure will eventally call this routine. |
71 if (_par_traversal_in_progress && |
71 if (_traversal_in_progress && |
72 to->in_collection_set() && !self_forwarded(obj)) { |
72 to->in_collection_set() && !self_forwarded(obj)) { |
73 |
73 |
74 assert(_cset_rs_update_cl[tid] != NULL, "should have been set already"); |
74 assert(_cset_rs_update_cl[tid] != NULL, "should have been set already"); |
75 _cset_rs_update_cl[tid]->do_oop(p); |
75 _cset_rs_update_cl[tid]->do_oop(p); |
76 |
76 |