OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Ralf S. Engelschall
Root: /e/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-src Date: 04-Nov-2004 14:00:49
Branch: HEAD Handle: 2004110413004600
Modified files:
openpkg-src/openpkg HISTORY bash.patch openpkg.spec
Log:
apply GNU bash patch for brain-dead Linux platforms with broken
WCONTINUE
Summary:
Revision Changes Path
1.220 +1 -0 openpkg-src/openpkg/HISTORY
1.7 +51 -0 openpkg-src/openpkg/bash.patch
1.369 +1 -1 openpkg-src/openpkg/openpkg.spec
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-src/openpkg/HISTORY
============================================================================
$ cvs diff -u -r1.219 -r1.220 HISTORY
--- openpkg-src/openpkg/HISTORY 3 Nov 2004 19:06:10 -0000 1.219
+++ openpkg-src/openpkg/HISTORY 4 Nov 2004 13:00:46 -0000 1.220
@@ -2,6 +2,7 @@
2004
====
+20041104 apply GNU bash patch for brain-dead Linux platforms with broken WCONTINUE
20041103 upgrade to OSSP uuid 1.1.0
20041024 synchronize GNU bash patches with OpenPKG "bash" package
20041018 upgrade to cURL 1.12.2
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/openpkg/bash.patch
============================================================================
$ cvs diff -u -r1.6 -r1.7 bash.patch
--- openpkg-src/openpkg/bash.patch 24 Oct 2004 17:13:20 -0000 1.6
+++ openpkg-src/openpkg/bash.patch 4 Nov 2004 13:00:46 -0000 1.7
@@ -793,3 +793,54 @@
was_tmpvar = old_var && tempvar_p (old_var);
if (was_tmpvar)
+
+-----------------------------------------------------------------------------
+
+On brain-dead Linux platforms somewhere between glibc 2.3.3 (20040405)
+and glibc 2.3.3 (20040917) (e.g. between SuSE 9.1 and SuSE 9.2 or
+between Gentoo 1.4.x and 1.5.x) the system headers provide the
+waitpid(2) option WCONTINUED although the underlying Linux kernels 2.4
+and 2.6 still do not support this option and return EINVAL on waitpid(2)
+using WCONTINUED.
+
+As a side-effect the GNU Bash goes into an endless loop with waitpid(3)
+calls after the first executed command terminated. The following
+patch is derived from Gentoo Portage and workarounds this problems by
+gracefully and efficiently degrading the options on waitpid(2) calls.
+
+Well, it's just another great example of how good Linux provides
+standardized APIs -- actually they are nothing more than Potemkin
+villages. Ggrrrrr!
+
+Index: jobs.c
+--- jobs.c.orig 2004-11-04 10:29:23 +0100
++++ jobs.c 2004-11-04 10:32:47 +0100
+@@ -2476,6 +2476,9 @@
+ PROCESS *child;
+ pid_t pid;
+ int call_set_current, last_stopped_job, job, children_exited, waitpid_flags;
++#ifdef __linux__
++ static int wcontinued_not_supported = 0;
++#endif
+
+ call_set_current = children_exited = 0;
+ last_stopped_job = NO_JOB;
+@@ -2489,7 +2492,18 @@
+ : 0;
+ if (sigchld || block == 0)
+ waitpid_flags |= WNOHANG;
++#ifdef __linux__
++ retry:
++ if (wcontinued_not_supported)
++ waitpid_flags &= ~WCONTINUED;
++#endif
+ pid = WAITPID (-1, &status, waitpid_flags);
++#ifdef __linux__
++ if (pid == -1 && errno == EINVAL) {
++ wcontinued_not_supported = 1;
++ goto retry;
++ }
++#endif
+
+ /* The check for WNOHANG is to make sure we decrement sigchld only
+ if it was non-zero before we called waitpid. */
@@ .
patch -p0 <<'@@ .'
Index: openpkg-src/openpkg/openpkg.spec
============================================================================
$ cvs diff -u -r1.368 -r1.369 openpkg.spec
--- openpkg-src/openpkg/openpkg.spec 3 Nov 2004 19:06:10 -0000 1.368
+++ openpkg-src/openpkg/openpkg.spec 4 Nov 2004 13:00:46 -0000 1.369
@@ -39,7 +39,7 @@
# o any cc(1)
# the package version/release
-%define V_openpkg 20041103
+%define V_openpkg 20041104
# the used software versions
%define V_rpm 4.2.1
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [EMAIL PROTECTED]