< prev index next >
src/hotspot/share/gc/z/zMarkStack.inline.hpp
Print this page
*** 119,129 ****
uint32_t version = 0;
for (;;) {
decode_versioned_pointer(vstack, stack->next_addr(), &version);
T* const new_vstack = encode_versioned_pointer(stack, version + 1);
! T* const prev_vstack = Atomic::cmpxchg(new_vstack, &_head, vstack);
if (prev_vstack == vstack) {
// Success
break;
}
--- 119,129 ----
uint32_t version = 0;
for (;;) {
decode_versioned_pointer(vstack, stack->next_addr(), &version);
T* const new_vstack = encode_versioned_pointer(stack, version + 1);
! T* const prev_vstack = Atomic::cmpxchg(&_head, vstack, new_vstack);
if (prev_vstack == vstack) {
// Success
break;
}
*** 143,153 ****
if (stack == NULL) {
return NULL;
}
T* const new_vstack = encode_versioned_pointer(stack->next(), version + 1);
! T* const prev_vstack = Atomic::cmpxchg(new_vstack, &_head, vstack);
if (prev_vstack == vstack) {
// Success
return stack;
}
--- 143,153 ----
if (stack == NULL) {
return NULL;
}
T* const new_vstack = encode_versioned_pointer(stack->next(), version + 1);
! T* const prev_vstack = Atomic::cmpxchg(&_head, vstack, new_vstack);
if (prev_vstack == vstack) {
// Success
return stack;
}
< prev index next >