summaryrefslogtreecommitdiffstats
path: root/tokio/src/sync/barrier.rs
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2020-09-11 15:14:45 -0700
committerGitHub <noreply@github.com>2020-09-11 15:14:45 -0700
commit2bc9a4815259c8ff4daa5e24f128ec826970d17f (patch)
treec075e4d97a145ce104cfc8ee39d8d06acece5c13 /tokio/src/sync/barrier.rs
parentc5a9ede157691ac5ca15283735bd666c6b016188 (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.rs4
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;
}
}