Is there a way to make gnat play nice with asynchronous signal handling, i.e. signalfd(2)? From my experimentation so far, it seems that the gnat/ada runtime always spawns a separate signal handling thread (i.e. Interrupt_Manager), which is fine ā but it always terminates the program at the first received event without attached handler, which is rather not fine.
Iām aware of pragma Interrupt_State, but it seems to exacerbate this issue, not help here: Interrupt_State(Int, SYSTEM) disallows attaching a handler, basically guaranteeing the abort-on-signal behaviour, while Interrupt_State(Int, USER) does allow attaching a handler but does not seem to mask the signal when no synchronous handler is attached.
In order to process the signal through signalfd it must not have been handled another way, so attaching a null handler in ada or setting it to SIG_IGN via sigaction is not an option. Is there any way to control the signal mask on the Interrupt_Manager thread?