1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-11-19 21:44:11 +01:00

17250: dont't execsave()/execrestore() around synchronous traps

This commit is contained in:
Peter Stephenson 2002-05-29 14:28:05 +00:00
parent 7898d5b198
commit 1ca8378051
2 changed files with 16 additions and 2 deletions

@ -1,5 +1,9 @@
2002-05-29 Peter Stephenson <pws@csr.com> 2002-05-29 Peter Stephenson <pws@csr.com>
* 17250: Src/signals.c: don't execsave()/execrestore() around
traps which are executed synchronously, which caused unexpected
return statuses from `trap "return ..." EXIT'.
* 17249: Src/Modules/tcp.c: send output from `ztcp' or `ztcp -v' * 17249: Src/Modules/tcp.c: send output from `ztcp' or `ztcp -v'
to stdout, not the zle file descriptor. to stdout, not the zle file descriptor.

@ -945,7 +945,16 @@ dotrapargs(int sig, int *sigtr, void *sigfn)
*sigtr |= ZSIG_IGNORED; *sigtr |= ZSIG_IGNORED;
lexsave(); lexsave();
if (sig != SIGEXIT && sig != SIGDEBUG) {
/*
* SIGEXIT and SIGDEBUG are always run synchronously, so we don't
* need to save and restore the state.
*
* Do we actually need this at all now we queue signals
* for handling in places where they won't cause trouble?
*/
execsave(); execsave();
}
breaks = 0; breaks = 0;
runhookdef(BEFORETRAPHOOK, NULL); runhookdef(BEFORETRAPHOOK, NULL);
if (*sigtr & ZSIG_FUNC) { if (*sigtr & ZSIG_FUNC) {
@ -972,6 +981,7 @@ dotrapargs(int sig, int *sigtr, void *sigfn)
trapret = trapreturn; trapret = trapreturn;
else if (errflag) else if (errflag)
trapret = 1; trapret = 1;
if (sig != SIGEXIT && sig != SIGDEBUG)
execrestore(); execrestore();
lexrestore(); lexrestore();