By requesting the pid in virCommandRunAsync, fdstream was claiming
that it would manually wait for the process. But on the failure
path, the child process was being leaked.
* src/fdstream.c (virFDStreamOpenFileInternal): Auto-reap child.
---
src/fdstream.c | 8 +-------
1 files changed, 1 insertions(+), 7 deletions(-)
diff --git a/src/fdstream.c b/src/fdstream.c
index 54f8198..d111813 100644
--- a/src/fdstream.c
+++ b/src/fdstream.c
@@ -31,7 +31,6 @@
# include <sys/un.h>
#endif
#include <netinet/in.h>
-#include <signal.h>
#include "fdstream.h"
#include "virterror_internal.h"
@@ -514,7 +513,6 @@ virFDStreamOpenFileInternal(virStreamPtr st,
struct stat sb;
virCommandPtr cmd = NULL;
int errfd = -1;
- pid_t pid = 0;
VIR_DEBUG("st=%p path=%s flags=%d offset=%llu length=%llu mode=%d
delete=%d",
st, path, flags, offset, length, mode, delete);
@@ -588,7 +586,7 @@ virFDStreamOpenFileInternal(virStreamPtr st,
}
virCommandSetErrorFD(cmd, &errfd);
- if (virCommandRunAsync(cmd, &pid) < 0)
+ if (virCommandRunAsync(cmd, NULL) < 0)
goto error;
VIR_FORCE_CLOSE(childfd);
@@ -611,10 +609,6 @@ virFDStreamOpenFileInternal(virStreamPtr st,
return 0;
error:
-#ifndef WIN32
- if (pid)
- kill(SIGTERM, pid);
-#endif
virCommandFree(cmd);
VIR_FORCE_CLOSE(fds[0]);
VIR_FORCE_CLOSE(fds[1]);
--
1.7.4.4