diff --git a/src/fullnode.rs b/src/fullnode.rs index d32d01066d..2d1913219b 100644 --- a/src/fullnode.rs +++ b/src/fullnode.rs @@ -318,6 +318,10 @@ impl FullNode { FullNode { exit, thread_hdls } } + //used for notifying many nodes in parallel to exit + pub fn notify_exit(self) { + self.exit.store(true, Ordering::Relaxed); + } pub fn close(self) -> Result<()> { self.exit.store(true, Ordering::Relaxed); self.join() @@ -355,6 +359,7 @@ mod tests { let exit = Arc::new(AtomicBool::new(false)); let entry = tn.data.clone(); let v = FullNode::new_validator(kp, bank, 0, None, tn, &entry, exit); + v.notify_exit(); v.close().unwrap(); } } diff --git a/tests/multinode.rs b/tests/multinode.rs index 678579ba9b..f1f204f9f6 100644 --- a/tests/multinode.rs +++ b/tests/multinode.rs @@ -464,6 +464,9 @@ fn test_multi_node_dynamic_network() { } } assert_eq!(consecutive_success, 10); + for (_, node) in validators { + node.notify_exit(); + } for (_, node) in validators { node.close().unwrap(); }