diff --git a/actix-server/src/worker.rs b/actix-server/src/worker.rs index 44465bd3..af14ab4b 100644 --- a/actix-server/src/worker.rs +++ b/actix-server/src/worker.rs @@ -296,7 +296,8 @@ impl ServerWorker { // get actix system context if it is set let sys = System::try_current(); - // TODO: wait for server startup with sync channel + // service factories initialization channel + let (factory_tx, factory_rx) = std::sync::mpsc::sync_channel(1); std::thread::Builder::new() .name(format!("actix-server worker {}", idx)) @@ -350,6 +351,8 @@ impl ServerWorker { } }; + factory_tx.send(()).unwrap(); + // a third spawn to make sure ServerWorker runs as non boxed future. spawn(ServerWorker { rx, @@ -369,6 +372,9 @@ impl ServerWorker { }) .expect("worker thread error/panic"); + // wait for service factories initialization + factory_rx.recv().unwrap(); + Ok(handle_pair(idx, tx1, tx2, counter)) }