def = NULL;
- if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
- goto cleanup; /* XXXX free the 'vm' we created ? */
+ if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) {
+ qemuDomainRemoveInactive(driver, vm);
+ vm = NULL;
+ goto cleanup;
+ }
if (qemuProcessStart(conn, driver, vm, NULL, -1, NULL, NULL,
VIR_NETDEV_VPORT_PROFILE_OP_CREATE,
virDomainAuditStart(vm, "booted", true);
dom = virGetDomain(conn, vm->def->name, vm->def->uuid);
- if (dom) dom->id = vm->def->id;
+ if (dom)
+ dom->id = vm->def->id;
- if (vm &&
- qemuDomainObjEndJob(driver, vm) == 0)
+ if (qemuDomainObjEndJob(driver, vm) == 0)
vm = NULL;
cleanup:
def = NULL;
- if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
+ if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) {
+ qemuDomainRemoveInactive(driver, vm);
+ vm = NULL;
goto cleanup;
+ }
if (qemuProcessAttach(conn, driver, vm, pid,
pidfile, monConfig, monJSON) < 0) {
+ if (qemuDomainObjEndJob(driver, vm) > 0)
+ qemuDomainRemoveInactive(driver, vm);
+ vm = NULL;
monConfig = NULL;
- goto endjob;
+ goto cleanup;
}
monConfig = NULL;
dom = virGetDomain(conn, vm->def->name, vm->def->uuid);
- if (dom) dom->id = vm->def->id;
+ if (dom)
+ dom->id = vm->def->id;
-endjob:
- if (qemuDomainObjEndJob(driver, vm) == 0) {
+ if (qemuDomainObjEndJob(driver, vm) == 0)
vm = NULL;
- goto cleanup;
- }
cleanup:
virDomainDefFree(def);
- virObjectUnref(qemuCaps);
virDomainChrSourceDefFree(monConfig);
if (vm)
virObjectUnlock(vm);
VIR_FREE(pidfile);
virObjectUnref(caps);
+ virObjectUnref(qemuCaps);
return dom;
}