From 784c413690c71212ad9e08bb093414abd1cacc08 Mon Sep 17 00:00:00 2001 From: Tanaka Akira Date: Fri, 6 Aug 1999 18:01:35 +0000 Subject: zsh-3.1.6-pws-1 --- Src/signals.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'Src/signals.c') diff --git a/Src/signals.c b/Src/signals.c index d29bdd4b0..4e9fed0cb 100644 --- a/Src/signals.c +++ b/Src/signals.c @@ -326,14 +326,23 @@ signal_suspend(int sig, int sig2) #ifdef POSIX_SIGNALS sigset_t set; +#ifdef BROKEN_POSIX_SIGSUSPEND + sigset_t oset; +#endif /* BROKEN_POSIX_SIGSUSPEND */ sigfillset(&set); sigdelset(&set, sig); sigdelset(&set, SIGHUP); /* still don't know why we add this? */ if (sig2) sigdelset(&set, sig2); +#ifdef BROKEN_POSIX_SIGSUSPEND + sigprocmask(SIG_SETMASK, &set, &oset); + pause(); + sigprocmask(SIG_SETMASK, &oset, NULL); +#else /* not BROKEN_POSIX_SIGSUSPEND */ ret = sigsuspend(&set); -#else +#endif /* BROKEN_POSIX_SIGSUSPEND */ +#else /* not POSIX_SIGNALS */ # ifdef BSD_SIGNALS sigset_t set; @@ -601,6 +610,9 @@ killjb(Job jn, int sig) } for (pn = jn->procs; pn; pn = pn->next) if ((err = kill(pn->pid, sig)) == -1 && errno != ESRCH) +#ifdef BROKEN_KILL_ESRCH + if(errno != EINVAL || sig != 0) +#endif /* BROKEN_KILL_ESRCH */ return -1; return err; } @@ -640,7 +652,11 @@ dosavetrap(int sig, int level) */ char func[20]; sprintf(func, "TRAP%s", sigs[sig]); - st->list = shfunctab->removenode(shfunctab, func); + /* We call removehashnode() directly because otherwise + * removeshfuncnode() would be called which in turn would + * call us again so that we would end up with a NULL pointer + * instead of the list for the trap. */ + st->list = removehashnode(shfunctab, func); } else { st->list = sigfuncs[sig]; unsettrap(sig); -- cgit 1.4.1