--- a/src/hotspot/share/runtime/thread.cpp Mon Nov 25 12:32:40 2019 +0100
+++ b/src/hotspot/share/runtime/thread.cpp Mon Nov 25 12:33:15 2019 +0100
@@ -861,7 +861,7 @@
bool Thread::claim_par_threads_do(uintx claim_token) {
uintx token = _threads_do_token;
if (token != claim_token) {
- uintx res = Atomic::cmpxchg(claim_token, &_threads_do_token, token);
+ uintx res = Atomic::cmpxchg(&_threads_do_token, token, claim_token);
if (res == token) {
return true;
}
@@ -4875,7 +4875,7 @@
typedef volatile int SpinLockT;
void Thread::SpinAcquire(volatile int * adr, const char * LockName) {
- if (Atomic::cmpxchg (1, adr, 0) == 0) {
+ if (Atomic::cmpxchg(adr, 0, 1) == 0) {
return; // normal fast-path return
}
@@ -4896,7 +4896,7 @@
SpinPause();
}
}
- if (Atomic::cmpxchg(1, adr, 0) == 0) return;
+ if (Atomic::cmpxchg(adr, 0, 1) == 0) return;
}
}
@@ -4968,9 +4968,9 @@
const intptr_t LOCKBIT = 1;
void Thread::muxAcquire(volatile intptr_t * Lock, const char * LockName) {
- intptr_t w = Atomic::cmpxchg(LOCKBIT, Lock, (intptr_t)0);
+ intptr_t w = Atomic::cmpxchg(Lock, (intptr_t)0, LOCKBIT);
if (w == 0) return;
- if ((w & LOCKBIT) == 0 && Atomic::cmpxchg(w|LOCKBIT, Lock, w) == w) {
+ if ((w & LOCKBIT) == 0 && Atomic::cmpxchg(Lock, w, w|LOCKBIT) == w) {
return;
}
@@ -4982,7 +4982,7 @@
// Optional spin phase: spin-then-park strategy
while (--its >= 0) {
w = *Lock;
- if ((w & LOCKBIT) == 0 && Atomic::cmpxchg(w|LOCKBIT, Lock, w) == w) {
+ if ((w & LOCKBIT) == 0 && Atomic::cmpxchg(Lock, w, w|LOCKBIT) == w) {
return;
}
}
@@ -4995,7 +4995,7 @@
for (;;) {
w = *Lock;
if ((w & LOCKBIT) == 0) {
- if (Atomic::cmpxchg(w|LOCKBIT, Lock, w) == w) {
+ if (Atomic::cmpxchg(Lock, w, w|LOCKBIT) == w) {
Self->OnList = 0; // hygiene - allows stronger asserts
return;
}
@@ -5003,7 +5003,7 @@
}
assert(w & LOCKBIT, "invariant");
Self->ListNext = (ParkEvent *) (w & ~LOCKBIT);
- if (Atomic::cmpxchg(intptr_t(Self)|LOCKBIT, Lock, w) == w) break;
+ if (Atomic::cmpxchg(Lock, w, intptr_t(Self)|LOCKBIT) == w) break;
}
while (Self->OnList != 0) {
@@ -5039,7 +5039,7 @@
// store (CAS) to the lock-word that releases the lock becomes globally visible.
void Thread::muxRelease(volatile intptr_t * Lock) {
for (;;) {
- const intptr_t w = Atomic::cmpxchg((intptr_t)0, Lock, LOCKBIT);
+ const intptr_t w = Atomic::cmpxchg(Lock, LOCKBIT, (intptr_t)0);
assert(w & LOCKBIT, "invariant");
if (w == LOCKBIT) return;
ParkEvent * const List = (ParkEvent *) (w & ~LOCKBIT);
@@ -5050,7 +5050,7 @@
// The following CAS() releases the lock and pops the head element.
// The CAS() also ratifies the previously fetched lock-word value.
- if (Atomic::cmpxchg(intptr_t(nxt), Lock, w) != w) {
+ if (Atomic::cmpxchg(Lock, w, intptr_t(nxt)) != w) {
continue;
}
List->OnList = 0;