From 78c3e89dfbd482cfcc6ccba4c73bbd97fd150b92 Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Wed, 13 May 2026 11:24:24 +0200 Subject: 54525: interrupt during redirect to fifo doesn't run precmd Even though we clear errflag here, there can be a queued signal that will run when we try to execute precmd and that will set errflag again, aborting precmd after all. Let the signals through here instead. --- ChangeLog | 3 +++ Src/init.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ff0eac1c1..49749e417 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2026-05-16 Mikael Magnusson + * 54525: Src/init.c: interrupt during redirect to fifo doesn't + run precmd + * 54569: Src/Zle/complist.c, Src/Zle/termquery.c, Src/Zle/zle_hist.c, Src/Zle/zle_keymap.c, Src/Zle/zle_main.c, Src/Zle/zle_misc.c, Src/Zle/zle_move.c, Src/Zle/zle_params.c, diff --git a/Src/init.c b/Src/init.c index 7c3b82461..a422036c7 100644 --- a/Src/init.c +++ b/Src/init.c @@ -127,7 +127,7 @@ loop(int toplevel, int justonce) if (isset(SHINSTDIN)) { setblock_stdin(); if (interact && toplevel) { - int hstop = stophist; + int hstop = stophist, q; stophist = 3; /* * Reset all errors including the interrupt error status @@ -136,6 +136,9 @@ loop(int toplevel, int justonce) * precaution to ensure we get back to the command line * no matter what. */ + q = queue_signal_level(); + dont_queue_signals(); + restore_queue_signals(q); errflag = 0; preprompt(); if (stophist != 3) -- cgit v1.3.1