MCPcopy Index your code
hub / github.com/RustPython/RustPython / trigger_signals

Function trigger_signals

crates/vm/src/signal.rs:63–88  ·  view source on GitHub ↗
(vm: &VirtualMachine)

Source from the content-addressed store, hash-verified

61#[inline(never)]
62#[cold]
63fn trigger_signals(vm: &VirtualMachine) -> PyResult<()> {
64 if IN_SIGNAL_HANDLER.with(|h| h.replace(true)) {
65 // Already inside a signal handler — defer pending signals
66 set_triggered();
67 return Ok(());
68 }
69 let _guard = SignalHandlerGuard;
70
71 // unwrap should never fail since we check above
72 let signal_handlers = vm.signal_handlers.get().unwrap().borrow();
73 for (signum, trigger) in TRIGGERS.iter().enumerate().skip(1) {
74 let triggered = trigger.swap(false, Ordering::Relaxed);
75 if triggered
76 && let Some(handler) = &signal_handlers[signum]
77 && let Some(callable) = handler.to_callable()
78 {
79 callable.invoke((signum, vm.ctx.none()), vm)?;
80 }
81 }
82 if let Some(signal_rx) = &vm.signal_rx {
83 for f in signal_rx.rx.try_iter() {
84 f(vm)?;
85 }
86 }
87 Ok(())
88}
89
90pub(crate) fn set_triggered() {
91 ANY_TRIGGERED.store(true, Ordering::Release);

Callers 1

check_signalsFunction · 0.85

Calls 13

set_triggeredFunction · 0.85
withMethod · 0.80
to_callableMethod · 0.80
noneMethod · 0.80
fFunction · 0.50
replaceMethod · 0.45
borrowMethod · 0.45
unwrapMethod · 0.45
getMethod · 0.45
skipMethod · 0.45
iterMethod · 0.45
swapMethod · 0.45

Tested by

no test coverage detected