Index: base/synchronization/waitable_event_posix.cc |
diff --git a/base/synchronization/waitable_event_posix.cc b/base/synchronization/waitable_event_posix.cc |
index ae03ead622324c647c070f875342cb892ba92add..87567c8e68d3d7d431f18807830b06bbbc4fc813 100644 |
--- a/base/synchronization/waitable_event_posix.cc |
+++ b/base/synchronization/waitable_event_posix.cc |
@@ -149,8 +149,9 @@ class SyncWaiter : public WaitableEvent::Waiter { |
base::ConditionVariable cv_; |
}; |
-bool WaitableEvent::Wait() { |
- return TimedWait(TimeDelta::FromSeconds(-1)); |
+void WaitableEvent::Wait() { |
+ bool result = TimedWait(TimeDelta::FromSeconds(-1)); |
+ DCHECK(result) << "TimedWait() should never fail with infinite timeout"; |
} |
bool WaitableEvent::TimedWait(const TimeDelta& max_time) { |
@@ -158,21 +159,21 @@ bool WaitableEvent::TimedWait(const TimeDelta& max_time) { |
const bool finite_time = max_time.ToInternalValue() >= 0; |
kernel_->lock_.Acquire(); |
- if (kernel_->signaled_) { |
- if (!kernel_->manual_reset_) { |
- // In this case we were signaled when we had no waiters. Now that |
- // someone has waited upon us, we can automatically reset. |
- kernel_->signaled_ = false; |
- } |
- |
- kernel_->lock_.Release(); |
- return true; |
+ if (kernel_->signaled_) { |
+ if (!kernel_->manual_reset_) { |
+ // In this case we were signaled when we had no waiters. Now that |
+ // someone has waited upon us, we can automatically reset. |
+ kernel_->signaled_ = false; |
} |
- SyncWaiter sw; |
- sw.lock()->Acquire(); |
+ kernel_->lock_.Release(); |
+ return true; |
+ } |
+ |
+ SyncWaiter sw; |
+ sw.lock()->Acquire(); |
- Enqueue(&sw); |
+ Enqueue(&sw); |
kernel_->lock_.Release(); |
// We are violating locking order here by holding the SyncWaiter lock but not |
// the WaitableEvent lock. However, this is safe because we don't lock @lock_ |
@@ -193,7 +194,7 @@ bool WaitableEvent::TimedWait(const TimeDelta& max_time) { |
sw.lock()->Release(); |
kernel_->lock_.Acquire(); |
- kernel_->Dequeue(&sw, &sw); |
+ kernel_->Dequeue(&sw, &sw); |
kernel_->lock_.Release(); |
return return_value; |