< prev index next >

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

Print this page

        

*** 21,33 **** --- 21,35 ---- * */ #ifndef SHARE_GC_SHENANDOAH_SHENANDOAHCLOSURES_INLINE_HPP #define SHARE_GC_SHENANDOAH_SHENANDOAHCLOSURES_INLINE_HPP + #include "gc/shared/barrierSetNMethod.hpp" #include "gc/shenandoah/shenandoahAsserts.hpp" #include "gc/shenandoah/shenandoahClosures.hpp" #include "gc/shenandoah/shenandoahHeap.inline.hpp" + #include "gc/shenandoah/shenandoahNMethod.inline.hpp" #include "oops/compressedOops.inline.hpp" #include "runtime/thread.hpp" ShenandoahForwardedIsAliveClosure::ShenandoahForwardedIsAliveClosure() : _mark_context(ShenandoahHeap::heap()->marking_context()) {
*** 130,139 **** --- 132,155 ---- void ShenandoahEvacUpdateOopStorageRootsClosure::do_oop(narrowOop* p) { ShouldNotReachHere(); } + ShenandoahCodeBlobAndDisarmClosure::ShenandoahCodeBlobAndDisarmClosure(OopClosure* cl) : + CodeBlobToOopClosure(cl, true /* fix_relocations */), + _bs(BarrierSet::barrier_set()->barrier_set_nmethod()) { + } + + void ShenandoahCodeBlobAndDisarmClosure::do_code_blob(CodeBlob* cb) { + nmethod* const nm = cb->as_nmethod_or_null(); + if (nm != NULL && !nm->test_set_oops_do_mark()) { + assert(!ShenandoahNMethod::gc_data(nm)->is_unregistered(), "Should not be here"); + CodeBlobToOopClosure::do_code_blob(cb); + _bs->disarm(nm); + } + } + #ifdef ASSERT template <class T> void ShenandoahAssertNotForwardedClosure::do_oop_work(T* p) { T o = RawAccess<>::oop_load(p); if (!CompressedOops::is_null(o)) {
< prev index next >