summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2019-04-10 14:53:23 +0200
committerLinus Färnstrand <linus@mullvad.net>2019-04-10 14:53:23 +0200
commitd5e9fda6765052caa0197759a22b5913c4e1ba99 (patch)
tree76ae7efc9c589e2fa08e369a8f9958cbc9ec34cb
parent0554f71fe0c0416129f943a9ffa2da8823dee2ec (diff)
parentc0eefe3beac2aedc2c3e4c28578aee759f0c5a21 (diff)
downloadmullvadvpn-d5e9fda6765052caa0197759a22b5913c4e1ba99.tar.xz
mullvadvpn-d5e9fda6765052caa0197759a22b5913c4e1ba99.zip
Merge branch 'correctly-capture-tokio-panic'
-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(),