On Wed, Apr 22, 2026 at 9:01 AM František Šumšal <[email protected]> wrote: > > Fix: > A naive solution would be to reset the catch_flag in run_interrupt_trap() > only if there's no pending signal, i.e.: > > diff --git a/trap.c b/trap.c > index 5cf8a1bd..dc806822 100644 > --- a/trap.c > +++ b/trap.c > @@ -1351,7 +1351,8 @@ run_interrupt_trap (int will_throw) > if (will_throw && running_trap > 0) > run_trap_cleanup (running_trap - 1); > pending_traps[SIGINT] = 0; /* run_pending_traps does this */ > - catch_flag = 0; > + if (first_pending_trap () == -1) > + catch_flag = 0; > _run_trap_internal (SIGINT, "interrupt trap"); > } > > Which does seem to help in this case, but I'm not sure about any potential > side effects this change could have.
Alternatively, catch_flag could be replaced by a variable that counts how many pending signals there are.
