Commit eea5ec40 authored by Victor Costan's avatar Victor Costan Committed by Commit Bot

Blink: Make ThreadCondition only work with Mutex.

The interaction between ThreadCondition (condition variables) and
recursive (a.k.a. re-entrant) mutexes is difficult to reason about.
Details in the "Why can the holder of a Lock not reacquire it?" section
of https://www.chromium.org/developers/lock-and-condition-variable

Bug: 805814
Change-Id: Ie0b5e026a43768108011ca8f2f6fd3fe0e1f4b03
Reviewed-on: https://chromium-review.googlesource.com/885862
Commit-Queue: Victor Costan <pwnall@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#531846}
parent 02fe30d4
......@@ -130,12 +130,12 @@ class WTF_EXPORT ThreadCondition final {
ThreadCondition();
~ThreadCondition();
void Wait(MutexBase&);
void Wait(Mutex&);
// Returns true if the condition was signaled before absoluteTime, false if
// the absoluteTime was reached or is in the past.
// The absoluteTime is in seconds, starting on January 1, 1970. The time is
// assumed to use the same time zone as WTF::currentTime().
bool TimedWait(MutexBase&, double absolute_time);
bool TimedWait(Mutex&, double absolute_time);
void Signal();
void Broadcast();
......
......@@ -204,7 +204,7 @@ ThreadCondition::~ThreadCondition() {
pthread_cond_destroy(&condition_);
}
void ThreadCondition::Wait(MutexBase& mutex) {
void ThreadCondition::Wait(Mutex& mutex) {
PlatformMutex& platform_mutex = mutex.Impl();
int result = pthread_cond_wait(&condition_, &platform_mutex.internal_mutex_);
DCHECK_EQ(result, 0);
......@@ -213,7 +213,7 @@ void ThreadCondition::Wait(MutexBase& mutex) {
#endif
}
bool ThreadCondition::TimedWait(MutexBase& mutex, double absolute_time) {
bool ThreadCondition::TimedWait(Mutex& mutex, double absolute_time) {
if (absolute_time < CurrentTime())
return false;
......
......@@ -242,7 +242,7 @@ ThreadCondition::ThreadCondition() {
ThreadCondition::~ThreadCondition() {}
void ThreadCondition::Wait(MutexBase& mutex) {
void ThreadCondition::Wait(Mutex& mutex) {
PlatformMutex& platform_mutex = mutex.Impl();
BOOL result = SleepConditionVariableCS(
&condition_, &platform_mutex.internal_mutex_, INFINITE);
......@@ -250,7 +250,7 @@ void ThreadCondition::Wait(MutexBase& mutex) {
++platform_mutex.recursion_count_;
}
bool ThreadCondition::TimedWait(MutexBase& mutex, double absolute_time) {
bool ThreadCondition::TimedWait(Mutex& mutex, double absolute_time) {
DWORD interval = AbsoluteTimeToWaitTimeoutInterval(absolute_time);
if (!interval) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment