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