diff --git a/actix-server/src/worker.rs b/actix-server/src/worker.rs index cd7491d7..d62409bc 100644 --- a/actix-server/src/worker.rs +++ b/actix-server/src/worker.rs @@ -135,6 +135,13 @@ pub(crate) struct ServerWorker { shutdown_timeout: Duration, } +/// Set worker to unavailable when dropping. +impl Drop for ServerWorker { + fn drop(&mut self) { + self.rx.close(); + } +} + struct WorkerService { factory: usize, status: WorkerServiceStatus, diff --git a/actix-server/tests/test_server.rs b/actix-server/tests/test_server.rs index e09f053b..3af072bb 100644 --- a/actix-server/tests/test_server.rs +++ b/actix-server/tests/test_server.rs @@ -517,6 +517,8 @@ async fn worker_restart() { let (server, sys) = rx.recv().unwrap(); + sleep(Duration::from_secs(3)).await; + let mut buf = [0; 8]; // worker 1 would not restart and return it's id consistently. @@ -545,7 +547,6 @@ async fn worker_restart() { // worker 2 restarting and work goes to worker 1. let mut stream = TcpStream::connect(addr).await.unwrap(); - let n = stream.read(&mut buf).await.unwrap(); let id = String::from_utf8_lossy(&buf[0..n]); assert_eq!("1", id);