Index: base/synchronization/waitable_event_win.cc |
diff --git a/base/synchronization/waitable_event_win.cc b/base/synchronization/waitable_event_win.cc |
index 6bec4b423360fd258f52d5fec56ce9ef7fe067c5..4db56277b7cdbaff42582dac2212fd50b79c01e0 100644 |
--- a/base/synchronization/waitable_event_win.cc |
+++ b/base/synchronization/waitable_event_win.cc |
@@ -51,10 +51,10 @@ void WaitableEvent::Wait() { |
bool WaitableEvent::TimedWait(const TimeDelta& max_time) { |
base::ThreadRestrictions::AssertWaitAllowed(); |
DCHECK_GE(max_time, TimeDelta()); |
- // Be careful here. TimeDelta has a precision of microseconds, but this API |
- // is in milliseconds. If there are 5.5ms left, should the delay be 5 or 6? |
- // It should be 6 to avoid returning too early. |
- DWORD timeout = saturated_cast<DWORD>(max_time.InMillisecondsRoundedUp()); |
+ // Truncate the timeout to milliseconds. The API specifies that this method |
+ // can return in less than |max_time| (when returning false), as the argument |
+ // is the maximum time that a caller is willing to wait. |
+ DWORD timeout = saturated_cast<DWORD>(max_time.InMilliseconds()); |
DWORD result = WaitForSingleObject(handle_.Get(), timeout); |
switch (result) { |