< prev index next >

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

Print this page

        

*** 57,67 **** wait_for_no_evac_threads(); return; } while (true) { ! jint other = Atomic::cmpxchg(threads_in_evac + 1, &_threads_in_evac, threads_in_evac); if (other == threads_in_evac) { // Success: caller may safely enter evacuation DEBUG_ONLY(ShenandoahThreadLocalData::set_evac_allowed(Thread::current(), true)); return; } else { --- 57,67 ---- wait_for_no_evac_threads(); return; } while (true) { ! jint other = Atomic::cmpxchg(&_threads_in_evac, threads_in_evac, threads_in_evac + 1); if (other == threads_in_evac) { // Success: caller may safely enter evacuation DEBUG_ONLY(ShenandoahThreadLocalData::set_evac_allowed(Thread::current(), true)); return; } else {
*** 96,107 **** assert(ShenandoahThreadLocalData::is_evac_allowed(Thread::current()), "sanity"); assert(!ShenandoahThreadLocalData::is_oom_during_evac(Thread::current()), "TL oom-during-evac must not be set"); jint threads_in_evac = Atomic::load_acquire(&_threads_in_evac); while (true) { ! jint other = Atomic::cmpxchg((threads_in_evac - 1) | OOM_MARKER_MASK, ! &_threads_in_evac, threads_in_evac); if (other == threads_in_evac) { // Success: wait for other threads to get out of the protocol and return. wait_for_no_evac_threads(); return; } else { --- 96,106 ---- assert(ShenandoahThreadLocalData::is_evac_allowed(Thread::current()), "sanity"); assert(!ShenandoahThreadLocalData::is_oom_during_evac(Thread::current()), "TL oom-during-evac must not be set"); jint threads_in_evac = Atomic::load_acquire(&_threads_in_evac); while (true) { ! jint other = Atomic::cmpxchg(&_threads_in_evac, threads_in_evac, (threads_in_evac - 1) | OOM_MARKER_MASK); if (other == threads_in_evac) { // Success: wait for other threads to get out of the protocol and return. wait_for_no_evac_threads(); return; } else {
< prev index next >