Skip to content

Commit 95e4dc2

Browse files
author
Vitali Lovich
committed
Simplify wait_timeout_until & fix condition typo
1 parent e72bd6d commit 95e4dc2

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

src/libstd/sync/condvar.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -475,17 +475,16 @@ impl Condvar {
475475
mut dur: Duration, mut condition: F)
476476
-> LockResult<(MutexGuard<'a, T>, WaitTimeoutResult)>
477477
where F: FnMut(&mut T) -> bool {
478-
let timed_out = Duration::new(0, 0);
478+
let start = Instant::now();
479479
loop {
480-
if !condition(&mut *guard) {
480+
if condition(&mut *guard) {
481481
return Ok((guard, WaitTimeoutResult(false)));
482-
} else if dur == timed_out {
483-
return Ok((guard, WaitTimeoutResult(true)));
484482
}
485-
let wait_timer = Instant::now();
486-
let wait_result = self.wait_timeout(guard, dur)?;
487-
dur = dur.checked_sub(wait_timer.elapsed()).unwrap_or(timed_out);
488-
guard = wait_result.0;
483+
let timeout = match dur.checked_sub(start.elapsed()) {
484+
Some(timeout) => timeout,
485+
None => return Ok((guard, WaitTimeoutResult(true))),
486+
}
487+
guard = self.wait_timeout(guard, dur)?.0;
489488
}
490489
}
491490

0 commit comments

Comments
 (0)