void ThreadCondition::wait(MutexBase& mutex) { PlatformMutex& platformMutex = mutex.impl(); int result = pthread_cond_wait(&m_condition, &platformMutex.m_internalMutex); ASSERT_UNUSED(result, !result); #if ENABLE(ASSERT) ++platformMutex.m_recursionCount; #endif }
bool ThreadCondition::timedWait(MutexBase& mutex, double absoluteTime) { DWORD interval = absoluteTimeToWaitTimeoutInterval(absoluteTime); if (!interval) { // Consider the wait to have timed out, even if our condition has already // been signaled, to match the pthreads implementation. return false; } return m_condition.timedWait(mutex.impl(), interval); }
bool ThreadCondition::timedWait(MutexBase& mutex, double absoluteTime) { if (absoluteTime < currentTime()) return false; if (absoluteTime > INT_MAX) { wait(mutex); return true; } int timeSeconds = static_cast<int>(absoluteTime); int timeNanoseconds = static_cast<int>((absoluteTime - timeSeconds) * 1E9); timespec targetTime; targetTime.tv_sec = timeSeconds; targetTime.tv_nsec = timeNanoseconds; PlatformMutex& platformMutex = mutex.impl(); int result = pthread_cond_timedwait(&m_condition, &platformMutex.m_internalMutex, &targetTime); #if ENABLE(ASSERT) ++platformMutex.m_recursionCount; #endif return result == 0; }
void ThreadCondition::wait(MutexBase& mutex) { m_condition.timedWait(mutex.impl(), INFINITE); }