mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 07:17:44 +00:00
qemu_capabilities: Stop QEMU process before freeing
virQEMUCapsInitQMP now stops QEMU process in all execution paths, before freeing the process structure. The qemuProcessQMPStop function can be called multiple times without problems... Won't attempt to stop processes and free resources multiple times. Follow the convention established in qemu_process of 1) alloc process structure 2) start process 3) use process 4) stop process 5) free process data structure The process data structure persists after the process activation fails or the process dies or is killed so stderr strings can be retrieved until the process data structure is freed. Signed-off-by: Chris Venteicher <cventeic@redhat.com> Reviewed-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
468841eabd
commit
bfff747313
@ -4393,6 +4393,7 @@ virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
qemuProcessQMPStop(proc);
|
||||
qemuProcessQMPFree(proc);
|
||||
return ret;
|
||||
}
|
||||
|
@ -8488,14 +8488,20 @@ qemuProcessQMPRun(qemuProcessQMPPtr proc,
|
||||
void
|
||||
qemuProcessQMPStop(qemuProcessQMPPtr proc)
|
||||
{
|
||||
if (proc->mon)
|
||||
virObjectUnlock(proc->mon);
|
||||
qemuMonitorClose(proc->mon);
|
||||
proc->mon = NULL;
|
||||
if (!proc)
|
||||
return;
|
||||
|
||||
virCommandAbort(proc->cmd);
|
||||
virCommandFree(proc->cmd);
|
||||
proc->cmd = NULL;
|
||||
if (proc->mon) {
|
||||
virObjectUnlock(proc->mon);
|
||||
qemuMonitorClose(proc->mon);
|
||||
proc->mon = NULL;
|
||||
}
|
||||
|
||||
if (proc->cmd) {
|
||||
virCommandAbort(proc->cmd);
|
||||
virCommandFree(proc->cmd);
|
||||
proc->cmd = NULL;
|
||||
}
|
||||
|
||||
if (proc->monpath)
|
||||
unlink(proc->monpath);
|
||||
@ -8512,8 +8518,10 @@ qemuProcessQMPStop(qemuProcessQMPPtr proc)
|
||||
virStrerror(errno, ebuf, sizeof(ebuf)));
|
||||
|
||||
VIR_FREE(*proc->qmperr);
|
||||
|
||||
proc->pid = 0;
|
||||
}
|
||||
|
||||
if (proc->pidfile)
|
||||
unlink(proc->pidfile);
|
||||
proc->pid = 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user