[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[libvirt] [PATCH 2/3] fdstream: avoid child process leak on error



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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]