less likely to fail system arbiter stop test

This commit is contained in:
Rob Ede 2021-02-03 01:29:10 +00:00
parent 21ba890c0a
commit b5f2c4ead8
No known key found for this signature in database
GPG Key ID: C2A3B36E841A91E6
3 changed files with 10 additions and 5 deletions

View File

@ -28,6 +28,7 @@ enum PatternElement {
} }
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
#[allow(clippy::large_enum_variant)]
enum PatternType { enum PatternType {
Static(String), Static(String),
Prefix(String), Prefix(String),

View File

@ -113,10 +113,11 @@ impl Arbiter {
where where
F: Fn() -> tokio::runtime::Runtime + Send + 'static, F: Fn() -> tokio::runtime::Runtime + Send + 'static,
{ {
let id = COUNT.fetch_add(1, Ordering::Relaxed);
let system_id = System::current().id();
let name = format!("actix-rt|system:{}|arbiter:{}", system_id, id);
let sys = System::current(); let sys = System::current();
let system_id = sys.id();
let arb_id = COUNT.fetch_add(1, Ordering::Relaxed);
let name = format!("actix-rt|system:{}|arbiter:{}", system_id, arb_id);
let (tx, rx) = mpsc::unbounded_channel(); let (tx, rx) = mpsc::unbounded_channel();
let (ready_tx, ready_rx) = std::sync::mpsc::channel::<()>(); let (ready_tx, ready_rx) = std::sync::mpsc::channel::<()>();
@ -136,7 +137,7 @@ impl Arbiter {
// register arbiter // register arbiter
let _ = System::current() let _ = System::current()
.tx() .tx()
.send(SystemCommand::RegisterArbiter(id, hnd)); .send(SystemCommand::RegisterArbiter(arb_id, hnd));
ready_tx.send(()).unwrap(); ready_tx.send(()).unwrap();
@ -146,7 +147,7 @@ impl Arbiter {
// deregister arbiter // deregister arbiter
let _ = System::current() let _ = System::current()
.tx() .tx()
.send(SystemCommand::DeregisterArbiter(id)); .send(SystemCommand::DeregisterArbiter(arb_id));
} }
}) })
.unwrap_or_else(|err| { .unwrap_or_else(|err| {

View File

@ -198,6 +198,9 @@ fn system_stop_stops_arbiters() {
System::current().stop(); System::current().stop();
sys.run().unwrap(); sys.run().unwrap();
// account for slightly slow thread de-spawns (only observed on windows)
thread::sleep(Duration::from_millis(100));
// arbiter should be dead and return false // arbiter should be dead and return false
assert!(!Arbiter::current().spawn_fn(|| {})); assert!(!Arbiter::current().spawn_fn(|| {}));
assert!(!arb.spawn_fn(|| {})); assert!(!arb.spawn_fn(|| {}));