From dec2402ac82d87c612e6ccdf60acae4813645590 Mon Sep 17 00:00:00 2001 From: Maarten Flippo Date: Thu, 27 Nov 2025 12:00:21 +0100 Subject: [PATCH 1/2] fix(pumpkin-solver): Stop search on SIGTERM --- .../src/bin/pumpkin-solver/os_signal_termination.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pumpkin-solver/src/bin/pumpkin-solver/os_signal_termination.rs b/pumpkin-solver/src/bin/pumpkin-solver/os_signal_termination.rs index c11eae020..16a4cf051 100644 --- a/pumpkin-solver/src/bin/pumpkin-solver/os_signal_termination.rs +++ b/pumpkin-solver/src/bin/pumpkin-solver/os_signal_termination.rs @@ -23,6 +23,12 @@ impl OsSignal { ) .expect("failed to register signal listener"); + let _ = signal_hook::flag::register( + signal_hook::consts::SIGTERM, + Arc::clone(&signal.signal_received), + ) + .expect("failed to register signal listener"); + signal } } From d74b6d39517f5b945743ffe5eabfb7bf3e8524eb Mon Sep 17 00:00:00 2001 From: Maarten Flippo Date: Fri, 28 Nov 2025 08:08:54 +0100 Subject: [PATCH 2/2] refactor(pumpkin-solver): Clean up signal registration --- .../pumpkin-solver/os_signal_termination.rs | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pumpkin-solver/src/bin/pumpkin-solver/os_signal_termination.rs b/pumpkin-solver/src/bin/pumpkin-solver/os_signal_termination.rs index 16a4cf051..8bdc49116 100644 --- a/pumpkin-solver/src/bin/pumpkin-solver/os_signal_termination.rs +++ b/pumpkin-solver/src/bin/pumpkin-solver/os_signal_termination.rs @@ -13,23 +13,23 @@ pub(crate) struct OsSignal { impl OsSignal { /// Create a termination and install the event listeners. pub(crate) fn install() -> OsSignal { - let signal = OsSignal { + // The signals to listen to for termination. + const TERMINATION_SIGNALS: &[std::ffi::c_int] = + &[signal_hook::consts::SIGINT, signal_hook::consts::SIGTERM]; + + let signal_termination = OsSignal { signal_received: Arc::new(AtomicBool::new(false)), }; - let _ = signal_hook::flag::register( - signal_hook::consts::SIGINT, - Arc::clone(&signal.signal_received), - ) - .expect("failed to register signal listener"); - - let _ = signal_hook::flag::register( - signal_hook::consts::SIGTERM, - Arc::clone(&signal.signal_received), - ) - .expect("failed to register signal listener"); + for &signal in TERMINATION_SIGNALS { + let _ = signal_hook::flag::register( + signal, + Arc::clone(&signal_termination.signal_received), + ) + .expect("failed to register signal listener"); + } - signal + signal_termination } }