From 95e4dc2ad143c91d0930ea28634e6f5c54ac0812 Mon Sep 17 00:00:00 2001 From: Vitali Lovich Date: Mon, 5 Feb 2018 15:11:00 -0800 Subject: [PATCH] Simplify wait_timeout_until & fix condition typo --- src/libstd/sync/condvar.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/libstd/sync/condvar.rs b/src/libstd/sync/condvar.rs index 76b68fc4f4fe..e6a3388aa258 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; } }