--- old/src/hotspot/share/oops/klass.cpp 2019-11-21 11:58:16.372098661 +0100 +++ new/src/hotspot/share/oops/klass.cpp 2019-11-21 11:58:15.872090218 +0100 @@ -410,7 +410,7 @@ // Does not need release semantics. If used by cleanup, it will link to // already safely published data, and if used by inserts, will be published // safely using cmpxchg. - Atomic::store(s, &_next_sibling); + Atomic::store(&_next_sibling, s); } void Klass::append_to_sibling_list() { @@ -436,7 +436,7 @@ // Note that the prev_first_subklass is always alive, meaning no sibling_next links // are ever created to not alive klasses. This is an important invariant of the lock-free // cleaning protocol, that allows us to safely unlink dead klasses from the sibling list. - if (Atomic::cmpxchg(this, &super->_subklass, prev_first_subklass) == prev_first_subklass) { + if (Atomic::cmpxchg(&super->_subklass, prev_first_subklass, this) == prev_first_subklass) { return; } } @@ -451,7 +451,7 @@ return; } // Try to fix _subklass until it points at something not dead. - Atomic::cmpxchg(subklass->next_sibling(), &_subklass, subklass); + Atomic::cmpxchg(&_subklass, subklass, subklass->next_sibling()); } } @@ -710,7 +710,7 @@ } int Klass::atomic_incr_biased_lock_revocation_count() { - return (int) Atomic::add(1, &_biased_lock_revocation_count); + return (int) Atomic::add(&_biased_lock_revocation_count, 1); } // Unless overridden, jvmti_class_status has no flags set.