From 5521d1537087b2c9ac67ef513a88b532444df3b5 Mon Sep 17 00:00:00 2001 From: Paul Nasrat Date: Mon, 16 Apr 2007 12:49:38 +0100 Subject: [PATCH] Fork failure patch from OpenSuSE --- lib/psm.c | 7 +++++++ rpmio/rpmsq.c | 1 + 2 files changed, 8 insertions(+) diff --git a/lib/psm.c b/lib/psm.c index c57c154..ffe28d9 100644 --- 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 */ diff --git a/rpmio/rpmsq.c b/rpmio/rpmsq.c index 1ff22f3..ea56e87 100644 --- a/rpmio/rpmsq.c +++ b/rpmio/rpmsq.c @@ -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]); -- 2.7.4