Skip to content

Commit eaccb5e

Browse files
fix(netwatch): avoid deadlock for get_default_route on windows
Closes #124
1 parent 41d3e77 commit eaccb5e

1 file changed

Lines changed: 8 additions & 3 deletions

File tree

netwatch/src/interfaces/windows.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,16 @@ fn get_default_route() -> Result<DefaultRouteDetails, Error> {
4242
}
4343

4444
pub async fn default_route() -> Option<DefaultRouteDetails> {
45-
match get_default_route() {
46-
Ok(route) => Some(route),
47-
Err(err) => {
45+
// WMI uses COM which can deadlock on a tokio worker thread.
46+
match tokio::task::spawn_blocking(get_default_route).await {
47+
Ok(Ok(route)) => Some(route),
48+
Ok(Err(err)) => {
4849
warn!("failed to retrieve default route: {:#?}", err);
4950
None
5051
}
52+
Err(err) => {
53+
warn!("default route task panicked: {:#?}", err);
54+
None
55+
}
5156
}
5257
}

0 commit comments

Comments
 (0)