< 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 >