qemu_passt: Deduplicate passt killing code

There are two places where we kill passt:

1) qemuPasstStop() - called transitively from qemuProcessStop(),
2) qemuPasstStart() - after failed start.

Now, the code from 2) lack error preservation (so if there's
another error during cleanup we might overwrite the original
error). Therefore, move the internals of qemuPasstStop() into a
separate function and call it from both places.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
This commit is contained in:
Michal Privoznik 2023-02-16 12:07:42 +01:00
parent 02355840ce
commit e5bfc661bc

View File

@ -102,11 +102,9 @@ qemuPasstAddNetProps(virDomainObj *vm,
}
void
qemuPasstStop(virDomainObj *vm,
virDomainNetDef *net)
static void
qemuPasstKill(const char *pidfile)
{
g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
virErrorPtr orig_err;
virErrorPreserveLast(&orig_err);
@ -118,6 +116,16 @@ qemuPasstStop(virDomainObj *vm,
}
void
qemuPasstStop(virDomainObj *vm,
virDomainNetDef *net)
{
g_autofree char *pidfile = qemuPasstCreatePidFilename(vm, net);
qemuPasstKill(pidfile);
}
int
qemuPasstSetupCgroup(virDomainObj *vm,
virDomainNetDef *net,
@ -147,7 +155,6 @@ qemuPasstStart(virDomainObj *vm,
g_autofree char *errbuf = NULL;
char macaddr[VIR_MAC_STRING_BUFLEN];
size_t i;
pid_t pid = (pid_t) -1;
int exitstatus = 0;
int cmdret = 0;
@ -273,10 +280,6 @@ qemuPasstStart(virDomainObj *vm,
return 0;
error:
ignore_value(virPidFileReadPathIfLocked(pidfile, &pid));
if (pid != -1)
virProcessKillPainfully(pid, true);
unlink(pidfile);
qemuPasstKill(pidfile);
return -1;
}