mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-20 07:59:00 +00:00
qemu_passt: Let passt write the PID file
The way we start passt currently is: we use virCommandSetPidFile() to use our virCommand machinery to acquire the PID file and leak opened FD into passt. Then, we use virPidFile*() APIs to read the PID file (which is needed when placing it into CGroups or killing it). But this does not fly really because passt daemonizes itself. Thus the process we started dies soon and thus the PID file is closed and unlocked. We could work around this by passing '--foreground' argument, but that weakens passt as it can't create new PID namespace (because it doesn't fork()). The solution is to let passt write the PID file, but since it does not lock the file and closes it as soon as it is written, we have to switch to those virPidFile APIs which don't expect PID file to be locked. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Laine Stump <laine@redhat.com>
This commit is contained in:
parent
e5bfc661bc
commit
029a892abd
@ -72,7 +72,7 @@ qemuPasstGetPid(virDomainObj *vm,
|
||||
{
|
||||
g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
|
||||
|
||||
return virPidFileReadPathIfLocked(pidfile, pid);
|
||||
return virPidFileReadPath(pidfile, pid);
|
||||
}
|
||||
|
||||
|
||||
@ -106,11 +106,14 @@ static void
|
||||
qemuPasstKill(const char *pidfile)
|
||||
{
|
||||
virErrorPtr orig_err;
|
||||
pid_t pid = 0;
|
||||
|
||||
virErrorPreserveLast(&orig_err);
|
||||
|
||||
if (virPidFileForceCleanupPath(pidfile) < 0)
|
||||
VIR_WARN("Unable to kill passt process");
|
||||
ignore_value(virPidFileReadPath(pidfile, &pid));
|
||||
if (pid != 0)
|
||||
virProcessKillPainfully(pid, true);
|
||||
unlink(pidfile);
|
||||
|
||||
virErrorRestore(&orig_err);
|
||||
}
|
||||
@ -161,13 +164,13 @@ qemuPasstStart(virDomainObj *vm,
|
||||
cmd = virCommandNew(PASST);
|
||||
|
||||
virCommandClearCaps(cmd);
|
||||
virCommandSetPidFile(cmd, pidfile);
|
||||
virCommandSetErrorBuffer(cmd, &errbuf);
|
||||
|
||||
virCommandAddArgList(cmd,
|
||||
"--one-off",
|
||||
"--socket", passtSocketName,
|
||||
"--mac-addr", virMacAddrFormat(&net->mac, macaddr),
|
||||
"--pid", pidfile,
|
||||
NULL);
|
||||
|
||||
if (net->mtu) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user