diff options
| author | Vitali Lovich <vlovich@google.com> | 2018-02-05 15:11:00 -0800 |
|---|---|---|
| committer | Vitali Lovich <vlovich@google.com> | 2018-02-05 15:11:00 -0800 |
| commit | 95e4dc2ad143c91d0930ea28634e6f5c54ac0812 (patch) | |
| tree | 8d42679e28f49b3d3788d453dfb5e4436a30a5a6 /src/libstd/sync | |
| parent | e72bd6df5398dd7ee02c6057b861537c49649b4e (diff) | |
| download | rust-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.rs | 15 |
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; } } |
