summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--talpid-ipc/src/lib.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/talpid-ipc/src/lib.rs b/talpid-ipc/src/lib.rs
index 21c0b030f4..fd5cde7c63 100644
--- a/talpid-ipc/src/lib.rs
+++ b/talpid-ipc/src/lib.rs
@@ -25,6 +25,9 @@ pub enum Error {
#[error(display = "Unable to start IPC server")]
StartServerError(#[error(cause)] io::Error),
+ #[error(display = "IPC server thread panicked and never returned a start result")]
+ ServerThreadPanicError,
+
#[error(display = "Error in IPC server")]
IpcServerError(#[error(cause)] io::Error),
@@ -63,12 +66,13 @@ impl IpcServer {
.map_err(Error::StartServerError)
.and_then(|(fut, start, server)| {
thread::spawn(move || tokio::run(fut));
- start
+ if let Some(error) = start
.wait()
- .expect("server panicked")
- .map(Err)
- .unwrap_or_else(|| Ok(server))
- .map_err(Error::IpcServerError)
+ .map_err(|_cancelled| Error::ServerThreadPanicError)?
+ {
+ return Err(Error::IpcServerError(error));
+ }
+ Ok(server)
})
.map(|server| IpcServer {
path: path.to_owned(),