diff --git a/vm/src/stdlib/signal.rs b/vm/src/stdlib/signal.rs index 7298b5cad..6b39b8f51 100644 --- a/vm/src/stdlib/signal.rs +++ b/vm/src/stdlib/signal.rs @@ -46,6 +46,7 @@ fn signal( signal::SaFlags::empty(), signal::SigSet::empty(), ); + check_signals(vm); unsafe { signal::sigaction(signal_enum, &sig_action) }.unwrap(); let old_handler = vm .signal_handlers @@ -54,6 +55,15 @@ fn signal( Ok(old_handler) } +fn getsignal(signalnum: PyIntRef, vm: &VirtualMachine) -> PyResult> { + let signalnum = signalnum.as_bigint().to_i32().unwrap(); + Ok(vm + .signal_handlers + .borrow_mut() + .get(&signalnum) + .map(|x| x.clone())) +} + pub fn check_signals(vm: &VirtualMachine) { for (signum, handler) in vm.signal_handlers.borrow().iter() { if *signum as usize >= NSIG { @@ -71,5 +81,6 @@ pub fn make_module(vm: &VirtualMachine) -> PyObjectRef { py_module!(vm, "_signal", { "signal" => ctx.new_rustfunc(signal), + "getsignal" => ctx.new_rustfunc(getsignal) }) }