< prev index next >
src/hotspot/share/prims/jvmtiRawMonitor.cpp
Print this page
*** 125,135 ****
//
// -------------------------------------------------------------------------
int JvmtiRawMonitor::SimpleEnter (Thread * Self) {
for (;;) {
! if (Atomic::cmpxchg_ptr (Self, &_owner, NULL) == NULL) {
return OS_OK ;
}
ObjectWaiter Node (Self) ;
Self->_ParkEvent->reset() ; // strictly optional
--- 125,135 ----
//
// -------------------------------------------------------------------------
int JvmtiRawMonitor::SimpleEnter (Thread * Self) {
for (;;) {
! if (Atomic::cmpxchg(Self, &_owner, (void*)NULL) == NULL) {
return OS_OK ;
}
ObjectWaiter Node (Self) ;
Self->_ParkEvent->reset() ; // strictly optional
*** 137,147 ****
RawMonitor_lock->lock_without_safepoint_check() ;
Node._next = _EntryList ;
_EntryList = &Node ;
OrderAccess::fence() ;
! if (_owner == NULL && Atomic::cmpxchg_ptr (Self, &_owner, NULL) == NULL) {
_EntryList = Node._next ;
RawMonitor_lock->unlock() ;
return OS_OK ;
}
RawMonitor_lock->unlock() ;
--- 137,147 ----
RawMonitor_lock->lock_without_safepoint_check() ;
Node._next = _EntryList ;
_EntryList = &Node ;
OrderAccess::fence() ;
! if (_owner == NULL && Atomic::cmpxchg(Self, &_owner, (void*)NULL) == NULL) {
_EntryList = Node._next ;
RawMonitor_lock->unlock() ;
return OS_OK ;
}
RawMonitor_lock->unlock() ;
*** 151,161 ****
}
}
int JvmtiRawMonitor::SimpleExit (Thread * Self) {
guarantee (_owner == Self, "invariant") ;
! OrderAccess::release_store_ptr (&_owner, NULL) ;
OrderAccess::fence() ;
if (_EntryList == NULL) return OS_OK ;
ObjectWaiter * w ;
RawMonitor_lock->lock_without_safepoint_check() ;
--- 151,161 ----
}
}
int JvmtiRawMonitor::SimpleExit (Thread * Self) {
guarantee (_owner == Self, "invariant") ;
! OrderAccess::release_store(&_owner, (void*)NULL) ;
OrderAccess::fence() ;
if (_EntryList == NULL) return OS_OK ;
ObjectWaiter * w ;
RawMonitor_lock->lock_without_safepoint_check() ;
*** 275,288 ****
jt->SR_lock()->unlock();
jt->java_suspend_self();
jt->SR_lock()->lock_without_safepoint_check();
}
// guarded by SR_lock to avoid racing with new external suspend requests.
! Contended = Atomic::cmpxchg_ptr (THREAD, &_owner, NULL) ;
jt->SR_lock()->unlock();
} else {
! Contended = Atomic::cmpxchg_ptr (THREAD, &_owner, NULL) ;
}
if (Contended == THREAD) {
_recursions ++ ;
return OM_OK ;
--- 275,288 ----
jt->SR_lock()->unlock();
jt->java_suspend_self();
jt->SR_lock()->lock_without_safepoint_check();
}
// guarded by SR_lock to avoid racing with new external suspend requests.
! Contended = Atomic::cmpxchg(THREAD, &_owner, (void*)NULL);
jt->SR_lock()->unlock();
} else {
! Contended = Atomic::cmpxchg(THREAD, &_owner, (void*)NULL);
}
if (Contended == THREAD) {
_recursions ++ ;
return OM_OK ;
< prev index next >