< prev index next >

src/hotspot/share/gc/z/zOopClosures.inline.hpp

Print this page

        

*** 27,36 **** --- 27,37 ---- #include "gc/z/zBarrier.inline.hpp" #include "gc/z/zHeap.inline.hpp" #include "gc/z/zOop.inline.hpp" #include "gc/z/zOopClosures.hpp" #include "oops/oop.inline.hpp" + #include "runtime/atomic.hpp" #include "utilities/debug.hpp" inline void ZLoadBarrierOopClosure::do_oop_nv(oop* p) { ZBarrier::load_barrier_on_oop_field(p); }
*** 97,102 **** --- 98,120 ---- inline void ZPhantomKeepAliveOopClosure::do_oop(narrowOop* p) { ShouldNotReachHere(); } + inline void ZPhantomCleanOopClosure::clean(volatile oop* p) { + oop obj = *p; + if (ZBarrier::is_alive_barrier_on_phantom_oop(obj)) { + ZBarrier::keep_alive_barrier_on_phantom_oop_field(p); + } else { + Atomic::cmpxchg(oop(NULL), p, obj); + } + } + + inline void ZPhantomCleanOopClosure::do_oop(oop* p) { + clean(p); + } + + inline void ZPhantomCleanOopClosure::do_oop(narrowOop* p) { + ShouldNotReachHere(); + } + #endif // SHARE_GC_Z_ZOOPCLOSURES_INLINE_HPP
< prev index next >