From 7c971d08cabc898a7743863799c8c5f8edc73888 Mon Sep 17 00:00:00 2001 From: Jackson Newhouse Date: Mon, 3 Feb 2025 14:22:35 -0800 Subject: [PATCH] fix(processing_engine): ensure default SIGINT behavior from python. --- influxdb3_processing_engine/src/virtualenv.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/influxdb3_processing_engine/src/virtualenv.rs b/influxdb3_processing_engine/src/virtualenv.rs index 31f77f52a12..3cc8ed9b1ce 100644 --- a/influxdb3_processing_engine/src/virtualenv.rs +++ b/influxdb3_processing_engine/src/virtualenv.rs @@ -1,4 +1,6 @@ use observability_deps::tracing::debug; +use pyo3::Python; +use std::ffi::CString; use std::path::Path; use std::process::Command; use std::sync::Once; @@ -46,8 +48,21 @@ fn set_pythonpath(venv_dir: &Path) -> Result<(), std::io::Error> { pub fn init_pyo3() { PYTHON_INIT.call_once(|| { pyo3::prepare_freethreaded_python(); - }) + + // This sets the signal handler fo SIGINT to be the default, allowing CTRL+C to work. + // See https://github.com/PyO3/pyo3/issues/3218. + Python::with_gil(|py| { + py.run( + &CString::new("import signal;signal.signal(signal.SIGINT, signal.SIG_DFL)") + .unwrap(), + None, + None, + ) + .expect("should be able to set signal handler."); + }); + }); } + #[cfg(unix)] pub(crate) fn initialize_venv(venv_path: &Path) -> Result<(), VenvError> { use std::process::Command;