summaryrefslogtreecommitdiffstats
path: root/tokio/src/sync/tests/loom_watch.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/tests/loom_watch.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/tests/loom_watch.rs')
-rw-r--r--tokio/src/sync/tests/loom_watch.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/tokio/src/sync/tests/loom_watch.rs b/tokio/src/sync/tests/loom_watch.rs
new file mode 100644
index 00000000..7944cab8
--- /dev/null
+++ b/tokio/src/sync/tests/loom_watch.rs
@@ -0,0 +1,20 @@
+use crate::sync::watch;
+
+use loom::future::block_on;
+use loom::thread;
+
+#[test]
+fn smoke() {
+ loom::model(|| {
+ let (tx, mut rx) = watch::channel(1);
+
+ let th = thread::spawn(move || {
+ tx.send(2).unwrap();
+ });
+
+ block_on(rx.changed()).unwrap();
+ assert_eq!(*rx.borrow(), 2);
+
+ th.join().unwrap();
+ })
+}