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 10:47:57 Branch: HEAD Handle: 2004110409475600 Modified files: openpkg-src/bash bash.patch bash.spec Log: 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! Summary: Revision Changes Path 1.12 +50 -0 openpkg-src/bash/bash.patch 1.59 +1 -1 openpkg-src/bash/bash.spec ____________________________________________________________________________ patch -p0 <<'@@ .' Index: openpkg-src/bash/bash.patch ============================================================================ $ cvs diff -u -r1.11 -r1.12 bash.patch --- openpkg-src/bash/bash.patch 9 Sep 2004 07:18:58 -0000 1.11 +++ openpkg-src/bash/bash.patch 4 Nov 2004 09:47:56 -0000 1.12 @@ -175,3 +175,53 @@ off = -zone.tz_minuteswest; #endif /* !HAVE_TZNAME */ +----------------------------------------------------------------------------- + +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/bash/bash.spec ============================================================================ $ cvs diff -u -r1.58 -r1.59 bash.spec --- openpkg-src/bash/bash.spec 1 Nov 2004 20:26:52 -0000 1.58 +++ openpkg-src/bash/bash.spec 4 Nov 2004 09:47:56 -0000 1.59 @@ -40,7 +40,7 @@ Group: Shell License: GPL Version: %{V_base_real}.%{V_plvl_raw} -Release: 20041101 +Release: 20041104 # list of sources Source0: ftp://ftp.cwru.edu/pub/bash/bash-%{V_base_real}.tar.gz @@ . ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List [EMAIL PROTECTED]