Index: base/synchronization/waitable_event_posix.cc |
diff --git a/base/synchronization/waitable_event_posix.cc b/base/synchronization/waitable_event_posix.cc |
index a8b686b88ce8ff583f68daad2c37e63efe1b1c67..5dfff468ad6acb0f2c81df98bcc31564f7029506 100644 |
--- a/base/synchronization/waitable_event_posix.cc |
+++ b/base/synchronization/waitable_event_posix.cc |
@@ -153,17 +153,22 @@ class SyncWaiter : public WaitableEvent::Waiter { |
}; |
void WaitableEvent::Wait() { |
- bool result = TimedWait(TimeDelta::FromSeconds(-1)); |
+ bool result = TimedWaitUntil(TimeTicks::Max()); |
DCHECK(result) << "TimedWait() should never fail with infinite timeout"; |
} |
-bool WaitableEvent::TimedWait(const TimeDelta& max_time) { |
+bool WaitableEvent::TimedWait(const TimeDelta& wait_delta) { |
+ // TimeTicks takes care of overflow including the cases when wait_delta |
+ // is a maximum value. |
+ return TimedWaitUntil(TimeTicks::Now() + wait_delta); |
+} |
+ |
+bool WaitableEvent::TimedWaitUntil(const TimeTicks& end_time) { |
+ base::ThreadRestrictions::AssertWaitAllowed(); |
// Record the event that this thread is blocking upon (for hang diagnosis). |
base::debug::ScopedEventWaitActivity event_activity(this); |
- base::ThreadRestrictions::AssertWaitAllowed(); |
- const TimeTicks end_time(TimeTicks::Now() + max_time); |
- const bool finite_time = max_time.ToInternalValue() >= 0; |
+ const bool finite_time = !end_time.is_max(); |
kernel_->lock_.Acquire(); |
if (kernel_->signaled_) { |