virCondSignal(&priv->job.cond);
}
+void
+virCHDomainRemoveInactive(virCHDriver *driver,
+ virDomainObj *vm)
+{
+ if (vm->persistent) {
+ virDomainObjListRemove(driver->domains, vm);
+ }
+}
+
static void *
virCHDomainObjPrivateAlloc(void *opaque)
{
void
virCHDomainObjEndJob(virDomainObj *obj);
+void
+virCHDomainRemoveInactive(virCHDriver *driver,
+ virDomainObj *vm);
+
int
virCHDomainRefreshThreadInfo(virDomainObj *vm);
cleanup:
if (vm && !dom) {
- virDomainObjListRemove(driver->domains, vm);
+ virCHDomainRemoveInactive(driver, vm);
}
virDomainObjEndAPI(&vm);
return dom;
goto cleanup;
}
- if (virDomainObjIsActive(vm)) {
- vm->persistent = 0;
- } else {
- virDomainObjListRemove(driver->domains, vm);
+ vm->persistent = 0;
+ if (!virDomainObjIsActive(vm)) {
+ virCHDomainRemoveInactive(driver, vm);
}
ret = 0;
if (virDomainObjCheckActive(vm) < 0)
goto endjob;
- ret = virCHProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_DESTROYED);
+ if (virCHProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_DESTROYED) < 0)
+ goto endjob;
+
+ virCHDomainRemoveInactive(driver, vm);
+ ret = 0;
endjob:
virCHDomainObjEndJob(vm);
- if (!vm->persistent)
- virDomainObjListRemove(driver->domains, vm);
cleanup:
virDomainObjEndAPI(&vm);