From 89b35c14836c869f2030ca93de974cdd06affabf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20H=C3=A4ggblad?= Date: Tue, 29 Nov 2022 09:43:08 +0100 Subject: [PATCH] Fix wait_for_signal_and_error on win (#1811) --- clients/socks5/src/client/mod.rs | 3 +-- common/task/src/lib.rs | 2 +- common/task/src/signal.rs | 22 ++++++++++++++++++---- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/clients/socks5/src/client/mod.rs b/clients/socks5/src/client/mod.rs index 399254c0d1..c5995c8796 100644 --- a/clients/socks5/src/client/mod.rs +++ b/clients/socks5/src/client/mod.rs @@ -38,8 +38,7 @@ use log::*; use nymsphinx::addressing::clients::Recipient; use nymsphinx::addressing::nodes::NodeIdentity; use tap::TapFallible; -use task::signal::wait_for_signal_and_error; -use task::{ShutdownListener, ShutdownNotifier}; +use task::{wait_for_signal_and_error, ShutdownListener, ShutdownNotifier}; pub mod config; diff --git a/common/task/src/lib.rs b/common/task/src/lib.rs index b8ddb7076a..2d0f91f59a 100644 --- a/common/task/src/lib.rs +++ b/common/task/src/lib.rs @@ -5,4 +5,4 @@ pub mod shutdown; pub mod signal; pub use shutdown::{ShutdownListener, ShutdownNotifier}; -pub use signal::wait_for_signal; +pub use signal::{wait_for_signal, wait_for_signal_and_error}; diff --git a/common/task/src/signal.rs b/common/task/src/signal.rs index a580c5e293..a04a0f5601 100644 --- a/common/task/src/signal.rs +++ b/common/task/src/signal.rs @@ -1,3 +1,5 @@ +use crate::{shutdown::SentError, ShutdownNotifier}; + #[cfg(unix)] pub async fn wait_for_signal() { use tokio::signal::unix::{signal, SignalKind}; @@ -17,10 +19,17 @@ pub async fn wait_for_signal() { } } +#[cfg(not(unix))] +pub async fn wait_for_signal() { + tokio::select! { + _ = tokio::signal::ctrl_c() => { + log::info!("Received SIGINT"); + }, + } +} + #[cfg(unix)] -pub async fn wait_for_signal_and_error( - shutdown: &mut crate::ShutdownNotifier, -) -> Result<(), crate::shutdown::SentError> { +pub async fn wait_for_signal_and_error(shutdown: &mut ShutdownNotifier) -> Result<(), SentError> { use tokio::signal::unix::{signal, SignalKind}; let mut sigterm = signal(SignalKind::terminate()).expect("Failed to setup SIGTERM channel"); @@ -47,10 +56,15 @@ pub async fn wait_for_signal_and_error( } #[cfg(not(unix))] -pub async fn wait_for_signal() { +pub async fn wait_for_signal_and_error(shutdown: &mut ShutdownNotifier) -> Result<(), SentError> { tokio::select! { _ = tokio::signal::ctrl_c() => { log::info!("Received SIGINT"); + Ok(()) }, + Some(msg) = shutdown.wait_for_error() => { + log::info!("Task error: {:?}", msg); + Err(msg) + } } }