clfs-1.2
clfs-2.1
clfs-3.0.0-systemd
clfs-3.0.0-sysvinit
systemd
sysvinit
Last change
on this file since dd6636b was 7f65c0e, checked in by Jim Gifford <clfs@…>, 19 years ago |
r625@server (orig r623): jim | 2005-10-31 12:43:24 -0800
Final Move
|
-
Property mode
set to
100644
|
File size:
1.1 KB
|
Rev | Line | |
---|
[617118d] | 1 | Reported on bug-bash by Tim Waugh <twaugh@redhat.com>
|
---|
| 2 | http://lists.gnu.org/archive/html/bug-bash/2004-09/msg00081.html
|
---|
| 3 |
|
---|
| 4 | GNU libc defines WCONTINUED, but (at least on Linux 2.4.x kernels)
|
---|
| 5 | waitpid() returns -1 with errno set to EINVAL if WCONTINUED is
|
---|
| 6 | supplied in options.
|
---|
| 7 |
|
---|
| 8 | Here is a patch to retry without WCONTINUED set in that case.
|
---|
| 9 |
|
---|
| 10 | --- bash-3.0/jobs.c.jobs 2004-09-08 16:07:25.081427747 +0100
|
---|
| 11 | +++ bash-3.0/jobs.c 2004-09-08 16:18:06.698604033 +0100
|
---|
| 12 | @@ -2475,6 +2475,7 @@
|
---|
| 13 | @@ -2471,6 +2471,7 @@
|
---|
| 14 | PROCESS *child;
|
---|
| 15 | pid_t pid;
|
---|
| 16 | int call_set_current, last_stopped_job, job, children_exited, waitpid_flags;
|
---|
| 17 | + static int wcontinued_not_supported = 0;
|
---|
| 18 |
|
---|
| 19 | call_set_current = children_exited = 0;
|
---|
| 20 | last_stopped_job = NO_JOB;
|
---|
| 21 | @@ -2484,7 +2485,15 @@
|
---|
| 22 | : 0;
|
---|
| 23 | if (sigchld || block == 0)
|
---|
| 24 | waitpid_flags |= WNOHANG;
|
---|
| 25 | + retry:
|
---|
| 26 | + if (wcontinued_not_supported)
|
---|
| 27 | + waitpid_flags &= ~WCONTINUED;
|
---|
| 28 | pid = WAITPID (-1, &status, waitpid_flags);
|
---|
| 29 | + if (errno == EINVAL)
|
---|
| 30 | + {
|
---|
| 31 | + wcontinued_not_supported = 1;
|
---|
| 32 | + goto retry;
|
---|
| 33 | + }
|
---|
| 34 |
|
---|
| 35 | /* The check for WNOHANG is to make sure we decrement sigchld only
|
---|
| 36 | if it was non-zero before we called waitpid. */
|
---|
Note:
See
TracBrowser
for help on using the repository browser.