comparison src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.inline.hpp @ 56679:55319b27b346

8225357: Rewire ShenandoahHeap::maybe_update_with_forwarded for contending fixups Reviewed-by: rkennke
author shade
date Fri, 07 Jun 2019 11:47:53 +0200
parents 785a12e0f89b
children 14c78683c9f0
comparison
equal deleted inserted replaced
7:930ddf7a4df9 9:c582de75c01d
251 break; 251 break;
252 default: 252 default:
253 ShouldNotReachHere(); 253 ShouldNotReachHere();
254 } 254 }
255 255
256 // Note: Only when concurrently updating references can obj become NULL here. 256 // Note: Only when concurrently updating references can obj be different
257 // It happens when a mutator thread beats us by writing another value. In that 257 // (that is, really different, not just different from-/to-space copies of the same)
258 // case we don't need to do anything else. 258 // from the one we originally loaded. Mutator thread can beat us by writing something
259 // else into the location. In that case, we would mark through that updated value,
260 // on the off-chance it is not handled by other means (e.g. via SATB). However,
261 // if that write was NULL, we don't need to do anything else.
259 if (UPDATE_REFS != CONCURRENT || !CompressedOops::is_null(obj)) { 262 if (UPDATE_REFS != CONCURRENT || !CompressedOops::is_null(obj)) {
260 shenandoah_assert_not_forwarded(p, obj); 263 shenandoah_assert_not_forwarded(p, obj);
261 shenandoah_assert_not_in_cset_except(p, obj, heap->cancelled_gc()); 264 shenandoah_assert_not_in_cset_except(p, obj, heap->cancelled_gc());
262 265
263 if (mark_context->mark(obj)) { 266 if (mark_context->mark(obj)) {