diff options
author | Carl Lerche <me@carllerche.com> | 2020-09-11 15:14:45 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-11 15:14:45 -0700 |
commit | 2bc9a4815259c8ff4daa5e24f128ec826970d17f (patch) | |
tree | c075e4d97a145ce104cfc8ee39d8d06acece5c13 /tokio/src/sync/barrier.rs | |
parent | c5a9ede157691ac5ca15283735bd666c6b016188 (diff) |
sync: tweak `watch` API (#2814)
Decouples getting the latest `watch` value from receiving the change
notification. The `Receiver` async method becomes
`Receiver::changed()`. The latest value is obtained from
`Receiver::borrow()`.
The implementation is updated to use `Notify`. This requires adding
`Notify::notify_waiters`. This method is generally useful but is kept
private for now.
Diffstat (limited to 'tokio/src/sync/barrier.rs')
-rw-r--r-- | tokio/src/sync/barrier.rs | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/tokio/src/sync/barrier.rs b/tokio/src/sync/barrier.rs index 23713251..fddb3a5b 100644 --- a/tokio/src/sync/barrier.rs +++ b/tokio/src/sync/barrier.rs @@ -110,9 +110,11 @@ impl Barrier { let mut wait = self.wait.clone(); loop { + let _ = wait.changed().await; + // note that the first time through the loop, this _will_ yield a generation // immediately, since we cloned a receiver that has never seen any values. - if wait.recv().await >= generation { + if *wait.borrow() >= generation { break; } } |