src/hotspot/share/jfr/recorder/storage/jfrBuffer.cpp
changeset 59252 623722a6aeb9
parent 58863 c16ac7a2eba4
equal deleted inserted replaced
59251:4cbfa5077d68 59252:623722a6aeb9
   102 }
   102 }
   103 
   103 
   104 const u1* JfrBuffer::concurrent_top() const {
   104 const u1* JfrBuffer::concurrent_top() const {
   105   do {
   105   do {
   106     const u1* current_top = stable_top();
   106     const u1* current_top = stable_top();
   107     if (Atomic::cmpxchg(MUTEX_CLAIM, &_top, current_top) == current_top) {
   107     if (Atomic::cmpxchg(&_top, current_top, MUTEX_CLAIM) == current_top) {
   108       return current_top;
   108       return current_top;
   109     }
   109     }
   110   } while (true);
   110   } while (true);
   111 }
   111 }
   112 
   112 
   126 void JfrBuffer::acquire(const void* id) {
   126 void JfrBuffer::acquire(const void* id) {
   127   assert(id != NULL, "invariant");
   127   assert(id != NULL, "invariant");
   128   const void* current_id;
   128   const void* current_id;
   129   do {
   129   do {
   130     current_id = Atomic::load(&_identity);
   130     current_id = Atomic::load(&_identity);
   131   } while (current_id != NULL || Atomic::cmpxchg(id, &_identity, current_id) != current_id);
   131   } while (current_id != NULL || Atomic::cmpxchg(&_identity, current_id, id) != current_id);
   132 }
   132 }
   133 
   133 
   134 bool JfrBuffer::try_acquire(const void* id) {
   134 bool JfrBuffer::try_acquire(const void* id) {
   135   assert(id != NULL, "invariant");
   135   assert(id != NULL, "invariant");
   136   const void* const current_id = Atomic::load(&_identity);
   136   const void* const current_id = Atomic::load(&_identity);
   137   return current_id == NULL && Atomic::cmpxchg(id, &_identity, current_id) == current_id;
   137   return current_id == NULL && Atomic::cmpxchg(&_identity, current_id, id) == current_id;
   138 }
   138 }
   139 
   139 
   140 void JfrBuffer::release() {
   140 void JfrBuffer::release() {
   141   OrderAccess::storestore();
   141   OrderAccess::storestore();
   142   _identity = NULL;
   142   _identity = NULL;