diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2008-09-11 14:47:18 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2008-09-11 14:47:18 +0000 |
commit | fb67cd46eafb1301844ed98f1c0e8d2cf8cbdee4 (patch) | |
tree | 22da1c3fc195ff6e753c5b0ff66c269ff9fdbe2d | |
parent | 8bb15c139248c9a4c4c0b2a053444e24ab8fc4f4 (diff) | |
download | zsh-fb67cd46eafb1301844ed98f1c0e8d2cf8cbdee4.tar.gz zsh-fb67cd46eafb1301844ed98f1c0e8d2cf8cbdee4.tar.xz zsh-fb67cd46eafb1301844ed98f1c0e8d2cf8cbdee4.zip |
25643: keep DEBUG and ZERR traps in subshells
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Doc/Zsh/builtins.yo | 4 | ||||
-rw-r--r-- | Src/exec.c | 3 |
3 files changed, 8 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index f2929793f..a370973ae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2008-09-11 Peter Stephenson <pws@csr.com> + * 25643: Doc/Zsh/builtins.yo, Src/exec.c: keep DEBUG and ZERR + traps in subshells. + * 25641: add option (NO_)MULTI_FUNC_DEF to turn off "foo1 foo2...()" function definitions. diff --git a/Doc/Zsh/builtins.yo b/Doc/Zsh/builtins.yo index c47ae49e7..8317c9547 100644 --- a/Doc/Zsh/builtins.yo +++ b/Doc/Zsh/builtins.yo @@ -1330,7 +1330,9 @@ If var(sig) is tt(0) or tt(EXIT) and the tt(trap) statement is not executed inside the body of a function, then the command var(arg) is executed when the shell terminates. -tt(ZERR), tt(DEBUG), and tt(EXIT) traps are not executed inside other traps. +tt(ZERR), tt(DEBUG), and tt(EXIT) traps are not executed inside other +traps. tt(ZERR) and tt(DEBUG) traps are kept within subshells, while +other traps are reset. Note that traps defined with the tt(trap) builtin are slightly different from those defined as `tt(TRAP)var(NAL) () { ... }', as the latter have diff --git a/Src/exec.c b/Src/exec.c index a78212888..f1c5788bf 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -869,7 +869,8 @@ entersubsh(int flags) if (!(flags & ESUB_KEEPTRAP)) for (sig = 0; sig < VSIGCOUNT; sig++) - if (!(sigtrapped[sig] & ZSIG_FUNC)) + if (!(sigtrapped[sig] & ZSIG_FUNC) && + sig != SIGDEBUG && sig != SIGZERR) unsettrap(sig); monitor = isset(MONITOR); if (flags & ESUB_NOMONITOR) |