You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-shells/bash/files/bash-3.0-jobs.patch

57 lines
1.4 KiB

Ripped from Fedora
* Wed Sep 8 2004 Tim Waugh <twaugh@redhat.com> 3.0-13
- Check for EINVAL from waitpid() and avoid WCONTINUED in that case.
- Fixed jobs4 test.
From: Tim Waugh
Subject: [patch] bash-3.0: avoid WCONTINUED if invalid
Date: Wed, 8 Sep 2004 16:52:38 +0100
User-agent: Mutt/1.4.1i
Hi,
GNU libc defines WCONTINUED, but (at least on Linux 2.4.x kernels)
waitpid() returns -1 with errno set to EINVAL if WCONTINUED is
supplied in options.
Here is a patch to retry without WCONTINUED set in that case.
Tim.
--- bash-3.0/tests/jobs4.sub
+++ bash-3.0/tests/jobs4.sub
@@ -18,5 +18,5 @@
wait
-cat &
+sleep 100 &
kill -1 %% && echo i killed it || echo could not kill it
--- bash-3.0/jobs.c
+++ bash-3.0/jobs.c
@@ -2475,6 +2475,7 @@
PROCESS *child;
pid_t pid;
int call_set_current, last_stopped_job, job, children_exited, waitpid_flags;
+ static int wcontinued_not_supported = 0;
call_set_current = children_exited = 0;
last_stopped_job = NO_JOB;
@@ -2488,7 +2489,15 @@
: 0;
if (sigchld || block == 0)
waitpid_flags |= WNOHANG;
+ retry:
+ if (wcontinued_not_supported)
+ waitpid_flags &= ~WCONTINUED;
pid = WAITPID (-1, &status, waitpid_flags);
+ if (pid == -1 && errno == EINVAL)
+ {
+ wcontinued_not_supported = 1;
+ goto retry;
+ }
/* The check for WNOHANG is to make sure we decrement sigchld only
if it was non-zero before we called waitpid. */