@@ -85,6 +85,7 @@ G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h,
8585 _num_optional_regions(optional_cset_length),
8686 _numa(g1h->numa ()),
8787 _obj_alloc_stat(NULL ),
88+ NOT_PRODUCT(_evac_failure_inject_counter(0 ) COMMA)
8889 _preserved_marks(preserved_marks),
8990 _evacuation_failed_info(),
9091 _evac_failure_regions(evac_failure_regions)
@@ -414,6 +415,12 @@ HeapWord* G1ParScanThreadState::allocate_copy_slow(G1HeapRegionAttr* dest_attr,
414415 return obj_ptr;
415416}
416417
418+ #ifndef PRODUCT
419+ bool G1ParScanThreadState::inject_evacuation_failure () {
420+ return _g1h->evac_failure_injector ()->evacuation_should_fail (_evac_failure_inject_counter);
421+ }
422+ #endif
423+
417424NOINLINE
418425void G1ParScanThreadState::undo_allocation (G1HeapRegionAttr dest_attr,
419426 HeapWord* obj_ptr,
@@ -458,7 +465,7 @@ oop G1ParScanThreadState::do_copy_to_survivor_space(G1HeapRegionAttr const regio
458465 assert (_g1h->is_in_reserved (obj_ptr), " Allocated memory should be in the heap" );
459466
460467 // Should this evacuation fail?
461- if (_g1h-> evac_failure_injector ()-> evacuation_should_fail ()) {
468+ if (inject_evacuation_failure ()) {
462469 // Doing this after all the allocation attempts also tests the
463470 // undo_allocation() method too.
464471 undo_allocation (dest_attr, obj_ptr, word_sz, node_index);
@@ -515,7 +522,6 @@ oop G1ParScanThreadState::do_copy_to_survivor_space(G1HeapRegionAttr const regio
515522 G1SkipCardEnqueueSetter x (&_scanner, dest_attr.is_young ());
516523 obj->oop_iterate_backwards (&_scanner, klass);
517524 return obj;
518-
519525 } else {
520526 _plab_allocator->undo_allocation (dest_attr, obj_ptr, word_sz, node_index);
521527 return forward_ptr;
0 commit comments