diff --git a/http/src/lib.rs b/http/src/lib.rs index caa599aa8..fc692f352 100644 --- a/http/src/lib.rs +++ b/http/src/lib.rs @@ -566,7 +566,12 @@ fn serve>( })) .map_err(|_| ()) }) - .and_then(|_| done_tx.send(())) + .and_then(|(_, server)| { + // We drop the server first to prevent a situation where main thread terminates + // before the server is properly dropped (see #504 for more details) + drop(server); + done_tx.send(()) + }) }); } diff --git a/ipc/src/server.rs b/ipc/src/server.rs index 8406afb86..933ad8648 100644 --- a/ipc/src/server.rs +++ b/ipc/src/server.rs @@ -240,7 +240,10 @@ impl> ServerBuilder { .buffer_unordered(1024) .for_each(|_| Ok(())) .select(stop) - .map(|_| { + .map(|(_, server)| { + // We drop the server first to prevent a situation where main thread terminates + // before the server is properly dropped (see #504 for more details) + drop(server); let _ = wait_signal.send(()); }) .map_err(|_| ()),