< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

Print this page
rev 60600 : 8251910: Shenandoah: assert(external_guard || result != __null) failed: Invalid JNI handle

*** 1819,1830 **** } // Perform handshake to flush out dead oops { ShenandoahTimingsTracker t(ShenandoahPhaseTimings::conc_weak_roots_rendezvous); ! ShenandoahRendezvousClosure cl; ! Handshake::execute(&cl); } } } void ShenandoahHeap::op_class_unloading() { --- 1819,1829 ---- } // Perform handshake to flush out dead oops { ShenandoahTimingsTracker t(ShenandoahPhaseTimings::conc_weak_roots_rendezvous); ! rendezvous_threads(); } } } void ShenandoahHeap::op_class_unloading() {
*** 1840,1849 **** --- 1839,1857 ---- ShenandoahConcurrentRootsEvacUpdateTask task(ShenandoahPhaseTimings::conc_strong_roots); workers()->run_task(&task); set_concurrent_strong_root_in_progress(false); } + void ShenandoahHeap::op_rendezvous_roots() { + rendezvous_threads(); + } + + void ShenandoahHeap::rendezvous_threads() { + ShenandoahRendezvousClosure cl; + Handshake::execute(&cl); + } + class ShenandoahResetUpdateRegionStateClosure : public ShenandoahHeapRegionClosure { private: ShenandoahMarkingContext* const _ctx; public: ShenandoahResetUpdateRegionStateClosure() : _ctx(ShenandoahHeap::heap()->marking_context()) {}
*** 2898,2907 **** --- 2906,2925 ---- try_inject_alloc_failure(); op_cleanup_early(); } + void ShenandoahHeap::entry_rendezvous_roots() { + static const char* msg = "Rendezvous roots"; + ShenandoahConcurrentPhase gc_phase(msg, ShenandoahPhaseTimings::conc_rendezvous_roots); + EventMark em("%s", msg); + + // This phase does not use workers, no need for setup + try_inject_alloc_failure(); + op_rendezvous_roots(); + } + void ShenandoahHeap::entry_cleanup_complete() { static const char* msg = "Concurrent cleanup"; ShenandoahConcurrentPhase gc_phase(msg, ShenandoahPhaseTimings::conc_cleanup_complete, true /* log_heap_usage */); EventMark em("%s", msg);
< prev index next >