Newtype SignalHandlers by ShaharNaveh · Pull Request #8089 · RustPython/RustPython
use crate::{Py, PyObjectRef, PyResult, VirtualMachine, signal}; use crate::{ Py, PyObjectRef, PyResult, VirtualMachine, signal::{self, SignalHandlers}, }; use core::{ ops::Range, sync::atomic::{self, Ordering},
vm.signal_handlers .get_or_init(signal::new_signal_handlers) .get_or_init(SignalHandlers::default) .borrow_mut()[signum as usize] = py_handler; }
let signal_handlers = vm.signal_handlers.get_or_init(signal::new_signal_handlers); let signal_handlers = vm.signal_handlers.get_or_init(SignalHandlers::default); let old_handler = signal_handlers.borrow_mut()[signalnum as usize].replace(handler); Ok(old_handler) }
#[pyfunction] fn getsignal(signalnum: i32, vm: &VirtualMachine) -> PyResult { signal::assert_in_range(signalnum, vm)?; let signal_handlers = vm.signal_handlers.get_or_init(signal::new_signal_handlers); let signal_handlers = vm.signal_handlers.get_or_init(SignalHandlers::default); let handler = signal_handlers.borrow()[signalnum as usize] .clone() .unwrap_or_else(|| vm.ctx.none());