mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-09 22:49:57 +09:00
Add test for signal
This commit is contained in:
16
tests/snippets/stdlib_signal.py
Normal file
16
tests/snippets/stdlib_signal.py
Normal 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]
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user