summaryrefslogtreecommitdiffstats
path: root/bin/sh/jobs.c
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2015-01-31 13:53:29 +0000
committerjilles <jilles@FreeBSD.org>2015-01-31 13:53:29 +0000
commit1442547d3bc256ea7676cfed7b77b2625432ace1 (patch)
tree1ae2467f1dbef8f92f69923384279e78438bc059 /bin/sh/jobs.c
parent1ccf1fa71bd2dd8de883671e64b8d7b47359cf1f (diff)
downloadFreeBSD-src-1442547d3bc256ea7676cfed7b77b2625432ace1.zip
FreeBSD-src-1442547d3bc256ea7676cfed7b77b2625432ace1.tar.gz
sh: Abort a wait builtin on any trapped signal.
This is required by POSIX. PR: 197210 Reported by: ache MFC after: 2 weeks
Diffstat (limited to 'bin/sh/jobs.c')
-rw-r--r--bin/sh/jobs.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/bin/sh/jobs.c b/bin/sh/jobs.c
index 765e6a2..b1bfa09 100644
--- a/bin/sh/jobs.c
+++ b/bin/sh/jobs.c
@@ -87,8 +87,8 @@ static int ttyfd = -1;
/* mode flags for dowait */
#define DOWAIT_BLOCK 0x1 /* wait until a child exits */
-#define DOWAIT_SIG 0x2 /* if DOWAIT_BLOCK, abort on SIGINT/SIGQUIT */
-#define DOWAIT_SIG_ANY 0x4 /* if DOWAIT_SIG, abort on any signal */
+#define DOWAIT_SIG 0x2 /* if DOWAIT_BLOCK, abort on signal */
+#define DOWAIT_SIG_TRAP 0x4 /* if DOWAIT_SIG, abort on trapped signal only */
#if JOBS
static void restartjob(struct job *);
@@ -1028,7 +1028,7 @@ waitforjob(struct job *jp, int *origstatus)
TRACE(("waitforjob(%%%td) called\n", jp - jobtab + 1));
while (jp->state == 0)
if (dowait(DOWAIT_BLOCK | (Tflag ? DOWAIT_SIG |
- DOWAIT_SIG_ANY : 0), jp) == -1)
+ DOWAIT_SIG_TRAP : 0), jp) == -1)
dotrap();
#if JOBS
if (jp->jobctl) {
@@ -1120,7 +1120,7 @@ dowait(int mode, struct job *job)
TRACE(("wait returns %d, status=%d\n", (int)pid, status));
if (pid == 0 && (mode & DOWAIT_SIG) != 0) {
pid = -1;
- if (((mode & DOWAIT_SIG_ANY) != 0 ?
+ if (((mode & DOWAIT_SIG_TRAP) != 0 ?
pendingsig : pendingsig_waitcmd) != 0) {
errno = EINTR;
break;
OpenPOWER on IntegriCloud