src/hotspot/share/gc/z/zMarkStack.inline.hpp
changeset 59252 623722a6aeb9
parent 59039 c60978f87d45
equal deleted inserted replaced
59251:4cbfa5077d68 59252:623722a6aeb9
   119   uint32_t version = 0;
   119   uint32_t version = 0;
   120 
   120 
   121   for (;;) {
   121   for (;;) {
   122     decode_versioned_pointer(vstack, stack->next_addr(), &version);
   122     decode_versioned_pointer(vstack, stack->next_addr(), &version);
   123     T* const new_vstack = encode_versioned_pointer(stack, version + 1);
   123     T* const new_vstack = encode_versioned_pointer(stack, version + 1);
   124     T* const prev_vstack = Atomic::cmpxchg(new_vstack, &_head, vstack);
   124     T* const prev_vstack = Atomic::cmpxchg(&_head, vstack, new_vstack);
   125     if (prev_vstack == vstack) {
   125     if (prev_vstack == vstack) {
   126       // Success
   126       // Success
   127       break;
   127       break;
   128     }
   128     }
   129 
   129 
   143     if (stack == NULL) {
   143     if (stack == NULL) {
   144       return NULL;
   144       return NULL;
   145     }
   145     }
   146 
   146 
   147     T* const new_vstack = encode_versioned_pointer(stack->next(), version + 1);
   147     T* const new_vstack = encode_versioned_pointer(stack->next(), version + 1);
   148     T* const prev_vstack = Atomic::cmpxchg(new_vstack, &_head, vstack);
   148     T* const prev_vstack = Atomic::cmpxchg(&_head, vstack, new_vstack);
   149     if (prev_vstack == vstack) {
   149     if (prev_vstack == vstack) {
   150       // Success
   150       // Success
   151       return stack;
   151       return stack;
   152     }
   152     }
   153 
   153