https://bugzilla.redhat.com/show_bug.cgi?id=1197600 when create a happy vm and then restart libvirtd, we will loss priv->pidfile, because we don't check if it is there is a pidfile. However we only use this pidfile when we start the vm, and won't use it after it start, so this is not a big deal. But it is strange when vm is offline but pidfile still exist, so remove vmname.pid in state dir (maybe /run/libvirt/qemu/)when priv->pidfile is NULL. Signed-off-by: Luyao Huang <lhuang@xxxxxxxxxx> --- src/qemu/qemu_process.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 515402e..46b93b3 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -92,6 +92,7 @@ qemuProcessRemoveDomainStatus(virQEMUDriverPtr driver, { char ebuf[1024]; char *file = NULL; + char *pidfile = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); int ret = -1; @@ -99,16 +100,19 @@ qemuProcessRemoveDomainStatus(virQEMUDriverPtr driver, if (virAsprintf(&file, "%s/%s.xml", cfg->stateDir, vm->def->name) < 0) goto cleanup; + if (virAsprintf(&pidfile, "%s/%s.pid", cfg->stateDir, vm->def->name) < 0) + goto cleanup; + if (unlink(file) < 0 && errno != ENOENT && errno != ENOTDIR) VIR_WARN("Failed to remove domain XML for %s: %s", vm->def->name, virStrerror(errno, ebuf, sizeof(ebuf))); VIR_FREE(file); - if (priv->pidfile && - unlink(priv->pidfile) < 0 && + if (unlink(priv->pidfile ? priv->pidfile : pidfile) < 0 && errno != ENOENT) VIR_WARN("Failed to remove PID file for %s: %s", vm->def->name, virStrerror(errno, ebuf, sizeof(ebuf))); + VIR_FREE(pidfile); ret = 0; cleanup: -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list