RPM Community Forums

Mailing List Message of <rpm-cvs>

[CVS] RPM: rpm/lib/ psm.c rpm/rpmio/ rpmsq.c

From: Ralf S. Engelschall <rse@rpm5.org>
Date: Mon 02 Jul 2007 - 09:33:37 CEST
Message-Id: <20070702073337.463B33484EA@rpm5.org>
  RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Ralf S. Engelschall
  Root:   /v/rpm/cvs                       Email:  rse@rpm5.org
  Module: rpm                              Date:   02-Jul-2007 09:33:37
  Branch: HEAD                             Handle: 2007070208333601

  Modified files:
    rpm/lib                 psm.c
    rpm/rpmio               rpmsq.c

  Log:
    Detect if a script cannot be run because fork(2) failed
    (usually a resource exhaustion situation).
    
    Submitted by: OpenSUSE via Paul Nasrat at rpm.org
    Obtained from: http://hg.rpm.org/rpm?cs=8cc53c3a2f7b

  Summary:
    Revision    Changes     Path
    2.203       +7  -0      rpm/lib/psm.c
    1.22        +1  -0      rpm/rpmio/rpmsq.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/lib/psm.c
  ============================================================================
  $ cvs diff -u -r2.202 -r2.203 psm.c
  --- rpm/lib/psm.c	27 Jun 2007 21:22:52 -0000	2.202
  +++ rpm/lib/psm.c	2 Jul 2007 07:33:36 -0000	2.203
  @@ -914,6 +914,12 @@
       }
       /*@=branchstate@*/
   
  +    if (psm->sq.child == (pid_t)-1) {
  +        rpmError(RPMERR_FORK, _("Couldn't fork %s: %s\n"), sln, strerror(errno));
  +        rc = RPMRC_FAIL;
  +        goto exit;
  +    }
  +
       (void) psmWait(psm);
   
     /* XXX filter order dependent multilib "other" arch helper error. */
  @@ -938,6 +944,7 @@
       }
     }
   
  +exit:
       if (freePrefixes) prefixes = hfd(prefixes, ipt);
   
       xx = Fclose(out);	/* XXX dup'd STDOUT_FILENO */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmsq.c
  ============================================================================
  $ cvs diff -u -r1.21 -r1.22 rpmsq.c
  --- rpm/rpmio/rpmsq.c	15 Jun 2007 09:32:47 -0000	1.21
  +++ rpm/rpmio/rpmsq.c	2 Jul 2007 07:33:37 -0000	1.22
  @@ -449,6 +449,7 @@
   
       pid = fork();
       if (pid < (pid_t) 0) {		/* fork failed.  */
  +	sq->child = (pid_t)-1;
   /*@-bounds@*/
   	xx = close(sq->pipes[0]);
   	xx = close(sq->pipes[1]);
  @@ .
Received on Mon Jul 2 09:33:37 2007
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.