Expand description
A single, process-wide Ctrl+C listener shared by every await point in a tune. Registering
the signal exactly once, as early in the process as possible, closes the gap where a
Ctrl+C delivered while no listener happens to be alive is silently swallowed – tokio
installs a process-wide SIGINT handler the first time ctrl_c() is polled and never
reverts to the OS default, so a lost signal isn’t merely unhandled, it’s gone.
Built on [tokio::sync::watch] rather than tokio_util::sync::CancellationToken (which
would need a new dependency) specifically for its per-clone “have I observed this value
yet” semantics: a fresh CtrlC::signalled call after a signal already fired resolves
immediately (including one that arrived before this handle’s first signalled() call at
all), and a second signal is a second, distinguishable resolution on the same handle:
the first aborts the run, while another during restore forces it to give up.
Structs§
- CtrlC
- A handle to the process’s Ctrl+C signal, threaded explicitly through every function that
needs to react to it (
execute,run_polling_loop,attempt_restore) rather than each callingtokio::signal::ctrl_c()itself. - CtrlC
Handle - A trigger for a
CtrlChandle created viaCtrlC::manual– the HTTP-triggered equivalent of a real Ctrl+C keypress. Deliberately a thin wrapper around the samewatch::Sender<u32>mechanism#[cfg(test)]’stest_pair()already uses internally, rather than a second, parallel cancellation mechanism:CtrlC::signalledcan’t tell the two apart, soexecute/run_polling_loop/attempt_restoreneed no changes at all to support HTTP-triggered cancellation.