< prev index next >

src/hotspot/share/runtime/objectMonitor.cpp

Print this page

        

*** 914,924 **** for (;;) { assert(THREAD == _owner, "invariant"); // release semantics: prior loads and stores from within the critical section // must not float (reorder) past the following store that drops the lock. ! OrderAccess::release_store(&_owner, (void*)NULL); // drop the lock OrderAccess::storeload(); // See if we need to wake a successor if ((intptr_t(_EntryList)|intptr_t(_cxq)) == 0 || _succ != NULL) { return; } // Other threads are blocked trying to acquire the lock. --- 914,924 ---- for (;;) { assert(THREAD == _owner, "invariant"); // release semantics: prior loads and stores from within the critical section // must not float (reorder) past the following store that drops the lock. ! Atomic::release_store(&_owner, (void*)NULL); // drop the lock OrderAccess::storeload(); // See if we need to wake a successor if ((intptr_t(_EntryList)|intptr_t(_cxq)) == 0 || _succ != NULL) { return; } // Other threads are blocked trying to acquire the lock.
*** 1090,1100 **** // The thread associated with Wakee may have grabbed the lock and "Wakee" may be // out-of-scope (non-extant). Wakee = NULL; // Drop the lock ! OrderAccess::release_store(&_owner, (void*)NULL); OrderAccess::fence(); // ST _owner vs LD in unpark() DTRACE_MONITOR_PROBE(contended__exit, this, object(), Self); Trigger->unpark(); --- 1090,1100 ---- // The thread associated with Wakee may have grabbed the lock and "Wakee" may be // out-of-scope (non-extant). Wakee = NULL; // Drop the lock ! Atomic::release_store(&_owner, (void*)NULL); OrderAccess::fence(); // ST _owner vs LD in unpark() DTRACE_MONITOR_PROBE(contended__exit, this, object(), Self); Trigger->unpark();
< prev index next >