From daa9f116d098ff4d30f298330af00fc61274c3e1 Mon Sep 17 00:00:00 2001 From: Discord9 Date: Fri, 6 Jan 2023 14:48:00 +0800 Subject: [PATCH 1/2] feat: allow not set SIGINT handler --- vm/src/stdlib/signal.rs | 4 +++- vm/src/vm/setting.rs | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/vm/src/stdlib/signal.rs b/vm/src/stdlib/signal.rs index c43410828..cb9b205ed 100644 --- a/vm/src/stdlib/signal.rs +++ b/vm/src/stdlib/signal.rs @@ -103,7 +103,9 @@ pub(crate) mod _signal { .clone() .get_attr("default_int_handler", vm) .expect("_signal does not have this attr?"); - signal(libc::SIGINT, int_handler, vm).expect("Failed to set sigint handler"); + if !vm.state.settings.no_sig_int { + signal(libc::SIGINT, int_handler, vm).expect("Failed to set sigint handler"); + } } #[pyfunction] diff --git a/vm/src/vm/setting.rs b/vm/src/vm/setting.rs index 53a4c59a3..362b47a5c 100644 --- a/vm/src/vm/setting.rs +++ b/vm/src/vm/setting.rs @@ -16,6 +16,9 @@ pub struct Settings { /// -O optimization switch counter pub optimize: u8, + /// Not set SIGINT handler(i.e. for embedded mode) + pub no_sig_int: bool, + /// -s pub no_user_site: bool, @@ -85,6 +88,7 @@ impl Default for Settings { inspect: false, interactive: false, optimize: 0, + no_sig_int: false, no_user_site: false, no_site: false, ignore_environment: false, From 763eaed2afc1a0ac97004dadfa6e1445adf289ca Mon Sep 17 00:00:00 2001 From: Discord9 Date: Tue, 31 Jan 2023 16:28:34 +0800 Subject: [PATCH 2/2] feat: impl Detail option for not set SIG_INT --- src/settings.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/settings.rs b/src/settings.rs index 711ae00f3..836bb1401 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -245,6 +245,9 @@ fn settings_from(matches: &ArgMatches) -> (Settings, RunMode) { if name == "warn_default_encoding" { warn_default_encoding = true } + if name == "no_sig_int" { + settings.no_sig_int = true; + } let value = parts.next().map(ToOwned::to_owned); (name, value) }));