]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
fdstream: avoid child process leak on error
authorEric Blake <eblake@redhat.com>
Tue, 12 Jul 2011 18:07:01 +0000 (12:07 -0600)
committerEric Blake <eblake@redhat.com>
Thu, 14 Jul 2011 18:00:13 +0000 (12:00 -0600)
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

index c9fe2f33bf0d646fce654e1223dc3f596212e52c..4dbe4a3ef7eae9a77b459802469ed35533fa6c80 100644 (file)
@@ -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=%x offset=%llu length=%llu mode=%o 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]);