diff --git a/netwatch/src/interfaces/windows.rs b/netwatch/src/interfaces/windows.rs index b8a1d06..4fc2ce1 100644 --- a/netwatch/src/interfaces/windows.rs +++ b/netwatch/src/interfaces/windows.rs @@ -42,11 +42,16 @@ fn get_default_route() -> Result { } pub async fn default_route() -> Option { - match get_default_route() { - Ok(route) => Some(route), - Err(err) => { + // WMI uses COM which can deadlock on a tokio worker thread. + match tokio::task::spawn_blocking(get_default_route).await { + Ok(Ok(route)) => Some(route), + Ok(Err(err)) => { warn!("failed to retrieve default route: {:#?}", err); None } + Err(err) => { + warn!("default route task panicked: {:#?}", err); + None + } } }