From 564da5c1289164d154b7d7b4ebbf33afb1e94803 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Fri, 14 Feb 2020 12:03:57 -0500 Subject: Test some more mpsc behavior with loom (#2246) --- tokio/src/sync/tests/loom_mpsc.rs | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'tokio/src/sync/tests') diff --git a/tokio/src/sync/tests/loom_mpsc.rs b/tokio/src/sync/tests/loom_mpsc.rs index 8fd6d14b..6a1a6abe 100644 --- a/tokio/src/sync/tests/loom_mpsc.rs +++ b/tokio/src/sync/tests/loom_mpsc.rs @@ -21,3 +21,57 @@ fn closing_tx() { assert!(v.is_none()); }); } + +#[test] +fn closing_unbounded_tx() { + loom::model(|| { + let (tx, mut rx) = mpsc::unbounded_channel(); + + thread::spawn(move || { + tx.send(()).unwrap(); + drop(tx); + }); + + let v = block_on(poll_fn(|cx| rx.poll_recv(cx))); + assert!(v.is_some()); + + let v = block_on(poll_fn(|cx| rx.poll_recv(cx))); + assert!(v.is_none()); + }); +} + +#[test] +fn dropping_tx() { + loom::model(|| { + let (tx, mut rx) = mpsc::channel::<()>(16); + + for _ in 0..2 { + let tx = tx.clone(); + thread::spawn(move || { + drop(tx); + }); + } + drop(tx); + + let v = block_on(poll_fn(|cx| rx.poll_recv(cx))); + assert!(v.is_none()); + }); +} + +#[test] +fn dropping_unbounded_tx() { + loom::model(|| { + let (tx, mut rx) = mpsc::unbounded_channel::<()>(); + + for _ in 0..2 { + let tx = tx.clone(); + thread::spawn(move || { + drop(tx); + }); + } + drop(tx); + + let v = block_on(poll_fn(|cx| rx.poll_recv(cx))); + assert!(v.is_none()); + }); +} -- cgit v1.2.3