nsresult Monitor::Wait(PRIntervalTime interval) { AssertCurrentThreadIn(); // save monitor state and reset it to empty PRInt32 savedEntryCount = mEntryCount; CallStack savedAcquisitionContext = GetAcquisitionContext(); BlockingResourceBase* savedChainPrev = mChainPrev; mEntryCount = 0; SetAcquisitionContext(CallStack::kNone); mChainPrev = 0; // give up the monitor until we're back from Wait() nsresult rv = PR_Wait(mMonitor, interval) == PR_SUCCESS ? NS_OK : NS_ERROR_FAILURE; // restore saved state mEntryCount = savedEntryCount; SetAcquisitionContext(savedAcquisitionContext); mChainPrev = savedChainPrev; return rv; }
nsresult ReentrantMonitor::Wait(PRIntervalTime aInterval) { AssertCurrentThreadIn(); // save monitor state and reset it to empty int32_t savedEntryCount = mEntryCount; CallStack savedAcquisitionContext = GetAcquisitionContext(); BlockingResourceBase* savedChainPrev = mChainPrev; mEntryCount = 0; SetAcquisitionContext(CallStack::kNone); mChainPrev = 0; nsresult rv; #ifdef MOZILLA_INTERNAL_API { GeckoProfilerSleepRAII profiler_sleep; #endif //MOZILLA_INTERNAL_API // give up the monitor until we're back from Wait() rv = PR_Wait(mReentrantMonitor, aInterval) == PR_SUCCESS ? NS_OK : NS_ERROR_FAILURE; #ifdef MOZILLA_INTERNAL_API } #endif //MOZILLA_INTERNAL_API // restore saved state mEntryCount = savedEntryCount; SetAcquisitionContext(savedAcquisitionContext); mChainPrev = savedChainPrev; return rv; }