< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp

Print this page
rev 60500 : 8251359: Shenandoah: filter null oops before calling enqueue/SATB barrier

*** 75,84 **** --- 75,85 ---- return fwd; } inline void ShenandoahBarrierSet::enqueue(oop obj) { + assert(!CompressedOops::is_null(obj), "checked by caller"); assert(_satb_mark_queue_set.is_active(), "only get here when SATB active"); // Filter marked objects before hitting the SATB queues. The same predicate would // be used by SATBMQ::filter to eliminate already marked objects downstream, but // filtering here helps to avoid wasteful SATB queueing work to begin with.
*** 114,132 **** --- 115,135 ---- } } inline void ShenandoahBarrierSet::keep_alive_if_weak(DecoratorSet decorators, oop value) { assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Reference strength must be known"); + assert(!CompressedOops::is_null(value), "checked by caller"); const bool on_strong_oop_ref = (decorators & ON_STRONG_OOP_REF) != 0; const bool peek = (decorators & AS_NO_KEEPALIVE) != 0; if (!peek && !on_strong_oop_ref) { satb_enqueue(value); } } template <DecoratorSet decorators> inline void ShenandoahBarrierSet::keep_alive_if_weak(oop value) { + assert(!CompressedOops::is_null(value), "checked by caller"); assert((decorators & ON_UNKNOWN_OOP_REF) == 0, "Reference strength must be known"); if (!HasDecorator<decorators, ON_STRONG_OOP_REF>::value && !HasDecorator<decorators, AS_NO_KEEPALIVE>::value) { satb_enqueue(value); }
< prev index next >