< prev index next >
src/hotspot/share/jfr/recorder/storage/jfrBuffer.cpp
Print this page
*** 102,112 ****
}
const u1* JfrBuffer::concurrent_top() const {
do {
const u1* current_top = stable_top();
! if (Atomic::cmpxchg(MUTEX_CLAIM, &_top, current_top) == current_top) {
return current_top;
}
} while (true);
}
--- 102,112 ----
}
const u1* JfrBuffer::concurrent_top() const {
do {
const u1* current_top = stable_top();
! if (Atomic::cmpxchg(&_top, current_top, MUTEX_CLAIM) == current_top) {
return current_top;
}
} while (true);
}
*** 126,142 ****
void JfrBuffer::acquire(const void* id) {
assert(id != NULL, "invariant");
const void* current_id;
do {
current_id = Atomic::load(&_identity);
! } while (current_id != NULL || Atomic::cmpxchg(id, &_identity, current_id) != current_id);
}
bool JfrBuffer::try_acquire(const void* id) {
assert(id != NULL, "invariant");
const void* const current_id = Atomic::load(&_identity);
! return current_id == NULL && Atomic::cmpxchg(id, &_identity, current_id) == current_id;
}
void JfrBuffer::release() {
OrderAccess::storestore();
_identity = NULL;
--- 126,142 ----
void JfrBuffer::acquire(const void* id) {
assert(id != NULL, "invariant");
const void* current_id;
do {
current_id = Atomic::load(&_identity);
! } while (current_id != NULL || Atomic::cmpxchg(&_identity, current_id, id) != current_id);
}
bool JfrBuffer::try_acquire(const void* id) {
assert(id != NULL, "invariant");
const void* const current_id = Atomic::load(&_identity);
! return current_id == NULL && Atomic::cmpxchg(&_identity, current_id, id) == current_id;
}
void JfrBuffer::release() {
OrderAccess::storestore();
_identity = NULL;
< prev index next >