This patch does the actual saving and removal of the vm status. It does so only at vm creation time at the moment. We need to update the config every time the life config changes later. --- src/qemu_driver.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 46 insertions(+), 0 deletions(-) diff --git a/src/qemu_driver.c b/src/qemu_driver.c index 7804094..d8b87e4 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -182,6 +182,44 @@ qemudAutostartConfigs(struct qemud_driver *driver) { virConnectClose(conn); } + +/** + * qemudRemoveDomainStatus + * + * remove all state files of a domain from statedir + * + * Returns 0 on success + */ +static int +qemudRemoveDomainStatus(virConnectPtr conn, + struct qemud_driver *driver, + virDomainObjPtr vm) +{ + int rc = -1; + char *file = NULL; + + if (asprintf(&file, "%s/%s.xml", driver->stateDir, vm->def->name) < 0) { + qemudReportError(conn, vm, NULL, VIR_ERR_NO_MEMORY, + "%s", _("failed to allocate space for status file")); + goto cleanup; + } + + if (unlink(file) < 0 && errno != ENOENT && errno != ENOTDIR) { + qemudReportError(conn, vm, NULL, VIR_ERR_INTERNAL_ERROR, + _("Failed to unlink status file %s"), file); + goto cleanup; + } + + if(virFileDeletePid(driver->stateDir, vm->def->name)) + goto cleanup; + + rc = 0; +cleanup: + VIR_FREE(file); + return rc; +} + + /** * qemudStartup: * @@ -532,6 +570,12 @@ static int qemudOpenMonitor(virConnectPtr conn, qemudCheckMonitorPrompt, "monitor", 10000); + if (!(vm->monitorpath = strdup(monitor))) { + qemudReportError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, + "%s", _("failed to allocate space for monitor path")); + goto error; + } + /* Keep monitor open upon success */ if (ret == 0) return ret; @@ -1046,6 +1090,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, return -1; } } + qemudSaveDomainStatus(conn, qemu_driver, vm); return ret; } @@ -1108,6 +1153,7 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED, /* shut it off for sure */ kill(vm->pid, SIGKILL); + qemudRemoveDomainStatus(conn, driver, vm); vm->pid = -1; vm->def->id = -1; -- 1.6.0.2 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list