about summary refs log tree commit diff
path: root/src/libstd/sync
diff options
context:
space:
mode:
authorVitali Lovich <vlovich@google.com>2018-02-05 15:11:00 -0800
committerVitali Lovich <vlovich@google.com>2018-02-05 15:11:00 -0800
commit95e4dc2ad143c91d0930ea28634e6f5c54ac0812 (patch)
tree8d42679e28f49b3d3788d453dfb5e4436a30a5a6 /src/libstd/sync
parente72bd6df5398dd7ee02c6057b861537c49649b4e (diff)
downloadrust-95e4dc2ad143c91d0930ea28634e6f5c54ac0812.tar.gz
rust-95e4dc2ad143c91d0930ea28634e6f5c54ac0812.zip
Simplify wait_timeout_until & fix condition typo
Diffstat (limited to 'src/libstd/sync')
-rw-r--r--src/libstd/sync/condvar.rs15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/libstd/sync/condvar.rs b/src/libstd/sync/condvar.rs
index 76b68fc4f4f..e6a3388aa25 100644
--- a/src/libstd/sync/condvar.rs
+++ b/src/libstd/sync/condvar.rs
@@ -475,17 +475,16 @@ impl Condvar {
                                         mut dur: Duration, mut condition: F)
                                         -> LockResult<(MutexGuard<'a, T>, WaitTimeoutResult)>
                                         where F: FnMut(&mut T) -> bool {
-        let timed_out = Duration::new(0, 0);
+        let start = Instant::now();
         loop {
-            if !condition(&mut *guard) {
+            if condition(&mut *guard) {
                 return Ok((guard, WaitTimeoutResult(false)));
-            } else if dur == timed_out {
-                return Ok((guard, WaitTimeoutResult(true)));
             }
-            let wait_timer = Instant::now();
-            let wait_result = self.wait_timeout(guard, dur)?;
-            dur = dur.checked_sub(wait_timer.elapsed()).unwrap_or(timed_out);
-            guard = wait_result.0;
+            let timeout = match dur.checked_sub(start.elapsed()) {
+                Some(timeout) => timeout,
+                None => return Ok((guard, WaitTimeoutResult(true))),
+            }
+            guard = self.wait_timeout(guard, dur)?.0;
         }
     }