Add signal.getsignal

This commit is contained in:
Aviv Palivoda
2019-07-29 20:46:40 +03:00
parent ca23c43ae4
commit 57cdae17a7

View File

@@ -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<Option<PyObjectRef>> {
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)
})
}