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]

Reply via email to