< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahEvacOOMHandler.cpp
Print this page
@@ -57,11 +57,11 @@
wait_for_no_evac_threads();
return;
}
while (true) {
- jint other = Atomic::cmpxchg(threads_in_evac + 1, &_threads_in_evac, threads_in_evac);
+ 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,12 +96,11 @@
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);
+ 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 >