bus: Receivers don't always get the broadcasted item
Took me all day but I finally got a simple test case. If you cargo run this a few times it will eventually hang (on my machine anyway).
extern crate bus;
use std::thread;
use bus::Bus;
fn main() {
println!("Starting");
let strings = vec!["hi", "bye", "one", "two"];
let mut bus = Bus::new(2);
{
let recv = bus.add_rx();
thread::spawn(move || {
println!("Looping 1");
for rec in recv {
println!("Got 1 :: {}", rec);
}
});
};
{
let recv = bus.add_rx();
thread::spawn(move || {
println!("Looping 2");
for rec in recv {
println!("Got a 2 :: {}", rec);
}
});
};
for f in strings {
println!("bcast :: {}", f);
bus.broadcast(0);
}
println!("Done");
}
Example output
Finishes:
Finished dev [unoptimized + debuginfo] target(s) in 0.08s
Running `target/debug/fse_dump`
Starting
Looping 1
bcast :: hi
bcast :: bye
Looping 2
Got 1 :: 0
bcast :: one
Got 1 :: 0
Got 1 :: 0
Got a 2 :: 0
Got a 2 :: 0
Got a 2 :: 0
bcast :: two
Got 1 :: 0
Got a 2 :: 0
Done
Stuck:
Finished dev [unoptimized + debuginfo] target(s) in 0.06s
Running `target/debug/fse_dump`
Starting
Looping 1
bcast :: hi
Looping 2
Got a 2 :: 0
bcast :: bye
bcast :: one
Got 1 :: 0
Got 1 :: 0
Got 1 :: 0
bcast :: two
Machine info:
$ uname -a
Darwin 34363bc7dc9c 18.2.0 Darwin Kernel Version 18.2.0: Thu Dec 20 20:46:53 PST 2018; root:xnu-4903.241.1~1/RELEASE_X86_64 x86_64 i386 MacBookPro11,3 Darwin
$ rustc --version
rustc 1.33.0 (2aa4c46cf 2019-02-28)
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 21 (9 by maintainers)
Okay I’ll try to see where it’s getting stuck tomorrow when I get to work. Thanks again for the quick response.
Okay I think we’re good now! Thanks!