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]