Fork failure patch from OpenSuSE
authorPaul Nasrat <pnasrat@redhat.com>
Mon, 16 Apr 2007 11:49:38 +0000 (12:49 +0100)
committerPaul Nasrat <pnasrat@redhat.com>
Mon, 16 Apr 2007 11:49:38 +0000 (12:49 +0100)
lib/psm.c
rpmio/rpmsq.c

index c57c154..ffe28d9 100644 (file)
--- a/lib/psm.c
+++ b/lib/psm.c
@@ -910,6 +910,12 @@ static rpmRC runScript(rpmpsm psm, Header h, const char * sln,
     }
     /*@=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. */
@@ -934,6 +940,7 @@ static rpmRC runScript(rpmpsm psm, Header h, const char * sln,
     }
   }
 
+exit:
     if (freePrefixes) prefixes = hfd(prefixes, ipt);
 
     xx = Fclose(out);  /* XXX dup'd STDOUT_FILENO */
index 1ff22f3..ea56e87 100644 (file)
@@ -437,6 +437,7 @@ fprintf(stderr, "    Enable(%p): %p\n", ME(), sq);
 
     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]);