Add test for signal

This commit is contained in:
Aviv Palivoda
2019-07-29 21:13:55 +03:00
parent e8001d789f
commit c1e07999cf
2 changed files with 24 additions and 2 deletions

View File

@@ -0,0 +1,16 @@
import signal
import time
signals = []
def handler(signum, frame):
signals.append(signum)
signal.signal(14, handler)
assert signal.getsignal(14) is handler
signal.alarm(2)
time.sleep(3.0)
assert signals == [14]

View File

@@ -13,7 +13,7 @@ use nix::unistd::alarm as sig_alarm;
// Signal triggers
// TODO: 64
const NSIG: usize = 10;
const NSIG: usize = 15;
static mut TRIGGERS: [AtomicBool; NSIG] = [
AtomicBool::new(false),
@@ -26,6 +26,11 @@ static mut TRIGGERS: [AtomicBool; NSIG] = [
AtomicBool::new(false),
AtomicBool::new(false),
AtomicBool::new(false),
AtomicBool::new(false),
AtomicBool::new(false),
AtomicBool::new(false),
AtomicBool::new(false),
AtomicBool::new(false),
];
extern "C" fn run_signal(signum: i32) {
@@ -82,7 +87,8 @@ pub fn check_signals(vm: &VirtualMachine) {
}
let triggerd = unsafe { TRIGGERS[*signum as usize].swap(false, Ordering::Relaxed) };
if triggerd {
vm.invoke(handler.clone(), vec![]).expect("Test");
vm.invoke(handler.clone(), vec![vm.new_int(*signum), vm.get_none()])
.expect("Test");
}
}
}