Class SignalHandlerNeighbourMarker

java.lang.Object
org.ek9lang.compiler.phase5.SignalHandlerNeighbourMarker

final class SignalHandlerNeighbourMarker extends Object
Who runs beside a signal handler, and what it reaches (EK9_NATIVE_CYCLE_COLLECTOR_DESIGN.md ยง13.11, S2c - option A, Steve 2026-11-02). A program that reaches a SignalHandler runs its own body alongside the signal dispatcher for the rest of its life - the only case in which code that is not concurrent races a runtime thread (a server's accept or an async statement blocks the program's thread until its threads stop; an async pipeline's stages are concurrent entry points already). So:
  • SIGNAL_REACHED on each user aggregate a signal handler can reach - the closure of what every SignalHandler implementation captures and of what code it can run injects; never into a MutexLock's payload, which is changed only under its lock (T11);
  • RUNS_BESIDE_SIGNAL_HANDLERS on each callable such a program can run that is not itself concurrent code (that is checked as concurrent code already) - flow-insensitive: before register or after, the same (option A). A write there to a field of a signal-reached type, or an in-place change of a value a signal handler captured, is E08251: build the state complete when it is made, or hold it in a MutexLock.
Both marks are set TRUE or FALSE on every user aggregate and callable, every compile. Fail closed: a signal handler that can reach a value typed Any reaches every type. Run after the registered-type fact, before the data-race walk.