I'm currently away, but I'll give it a try when I get back at the end of the week. On Sep 2, 2015 5:15 AM, "Bart Schaefer" wrote: > On Sep 2, 2:13am, Vincent Lefevre wrote: > } > } zira% updprompt() { true && { : } } > } zira% TRAPCHLD() { updprompt } > } zira% sleep 2 & sleep 3 ; echo OK > } [1] 20452 > } [1] + done sleep 2 > } > } and zsh freezes here. > > The following fixes it, but makes me nervous. Is Mathias Fredriksson > still listening? Try to reproduce that deadlock from the thread back > at the beginning of August? (Was it really that recently? Gaah.) > > > diff --git a/Src/signals.c b/Src/signals.c > index f45c186..aa0b5aa 100644 > --- a/Src/signals.c > +++ b/Src/signals.c > @@ -1348,6 +1348,7 @@ void > dotrap(int sig) > { > void *funcprog; > + int q = queue_signal_level(); > > if (sigtrapped[sig] & ZSIG_FUNC) { > HashNode hn = gettrapnode(sig, 0); > @@ -1370,5 +1371,9 @@ dotrap(int sig) > if ((sigtrapped[sig] & ZSIG_IGNORED) || !funcprog || errflag) > return; > > + dont_queue_signals(); > + > dotrapargs(sig, sigtrapped+sig, funcprog); > + > + restore_queue_signals(q); > } >