From ebd213d5767e0cd3eb0f1099b835a789c8eefb8b Mon Sep 17 00:00:00 2001 From: fakeshadow <24548779@qq.com> Date: Tue, 6 Apr 2021 09:56:46 +0800 Subject: [PATCH] fix panic on shutdown --- actix-server/src/test_server.rs | 13 ++++--------- actix-server/src/worker.rs | 2 +- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/actix-server/src/test_server.rs b/actix-server/src/test_server.rs index bcee6d1b..76759fd0 100644 --- a/actix-server/src/test_server.rs +++ b/actix-server/src/test_server.rs @@ -35,7 +35,6 @@ pub struct TestServerRuntime { addr: net::SocketAddr, host: String, port: u16, - system: System, handle: ServerHandle, } @@ -51,18 +50,17 @@ impl TestServer { thread::spawn(move || { System::new().block_on(async { let server = factory(Server::build()).workers(1).disable_signals().run(); - tx.send((server.handle(), System::current())).unwrap(); + tx.send(server.handle()).unwrap(); server.await }) }); - let (handle, system) = rx.recv().unwrap(); + let handle = rx.recv().unwrap(); TestServerRuntime { addr: "127.0.0.1:0".parse().unwrap(), host: "127.0.0.1".to_string(), port: 0, - system, handle, } } @@ -85,14 +83,13 @@ impl TestServer { .disable_signals() .run(); - tx.send((server.handle(), System::current(), local_addr)) - .unwrap(); + tx.send((server.handle(), local_addr)).unwrap(); server.await }) }); - let (handle, system, addr) = rx.recv().unwrap(); + let (handle, addr) = rx.recv().unwrap(); let host = format!("{}", addr.ip()); let port = addr.port(); @@ -101,7 +98,6 @@ impl TestServer { addr, host, port, - system, handle, } } @@ -136,7 +132,6 @@ impl TestServerRuntime { /// Stop http server fn stop(&mut self) { let _ = self.handle.stop(false); - self.system.stop(); } /// Connect to server, return tokio TcpStream diff --git a/actix-server/src/worker.rs b/actix-server/src/worker.rs index c8c6691f..1c3d78b5 100644 --- a/actix-server/src/worker.rs +++ b/actix-server/src/worker.rs @@ -256,7 +256,7 @@ impl ServerWorker { shutdown_timeout: config.shutdown_timeout, }; - local.block_on(&rt, worker) + local.block_on(&rt, async { worker.await }); } Err(e) => factory_tx.send(Some(e)).unwrap(), }