summaryrefslogtreecommitdiff
path: root/Src/signals.c
diff options
context:
space:
mode:
authorAxel Beckert <abe@deuxchevaux.org>2014-08-11 17:39:42 +0200
committerAxel Beckert <abe@deuxchevaux.org>2014-08-11 17:39:42 +0200
commit382c26acfc62a56744ab9eb603efc56130764fd3 (patch)
tree1b7cb9d3e372481007fc4546e7d06ce5bb1bc104 /Src/signals.c
parent73508e345b4925f33b7f652aba9bd313169e5ac2 (diff)
parentf8ae47f29b766dc0330b19d7fdb35859d6aab930 (diff)
downloadzsh-382c26acfc62a56744ab9eb603efc56130764fd3.tar.gz
zsh-382c26acfc62a56744ab9eb603efc56130764fd3.zip
New upstream release candidate: Merge branch 'upstream' into debian
Diffstat (limited to 'Src/signals.c')
-rw-r--r--Src/signals.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/Src/signals.c b/Src/signals.c
index c8f5fbcca..cb2b58161 100644
--- a/Src/signals.c
+++ b/Src/signals.c
@@ -369,7 +369,7 @@ signal_suspend(UNUSED(int sig), int wait_cmd)
#ifdef POSIX_SIGNALS
# ifdef BROKEN_POSIX_SIGSUSPEND
sigprocmask(SIG_SETMASK, &set, &oset);
- pause();
+ ret = pause();
sigprocmask(SIG_SETMASK, &oset, NULL);
# else /* not BROKEN_POSIX_SIGSUSPEND */
ret = sigsuspend(&set);
@@ -1155,6 +1155,7 @@ dotrapargs(int sig, int *sigtr, void *sigfn)
char *name, num[4];
int obreaks = breaks;
int oretflag = retflag;
+ int olastval = lastval;
int isfunc;
int traperr, new_trap_state, new_trap_return;
@@ -1261,6 +1262,13 @@ dotrapargs(int sig, int *sigtr, void *sigfn)
} else {
if (traperr && !EMULATION(EMULATE_SH))
lastval = 1;
+ else {
+ /*
+ * With no explicit forced return, we keep the
+ * lastval from before the trap ran.
+ */
+ lastval = olastval;
+ }
if (try_tryflag)
errflag = traperr;
breaks += obreaks;