mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
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.
This commit is contained in:
parent
e208c38b49
commit
3cbf5d5f76
@ -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]);
|
||||
|
Loading…
Reference in New Issue
Block a user