virObjectEventPtr event;
char *charAlias = NULL;
char *objAlias = NULL;
+ char *tlsAlias = NULL;
qemuDomainObjPrivatePtr priv = vm->privateData;
ssize_t idx;
int ret = -1;
VIR_DEBUG("Removing RNG device %s from domain %p %s",
rng->info.alias, vm, vm->def->name);
+
if (virAsprintf(&objAlias, "obj%s", rng->info.alias) < 0)
goto cleanup;
if (!(charAlias = qemuAliasChardevFromDevAlias(rng->info.alias)))
goto cleanup;
+ if (rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD &&
+ !(tlsAlias = qemuAliasTLSObjFromChardevAlias(charAlias)))
+ goto cleanup;
+
qemuDomainObjEnterMonitor(driver, vm);
+
rc = qemuMonitorDelObject(priv->mon, objAlias);
- if (rc == 0 && rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD)
+ if (rc == 0 && rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD) {
ignore_value(qemuMonitorDetachCharDev(priv->mon, charAlias));
+ if (tlsAlias)
+ ignore_value(qemuMonitorDelObject(priv->mon, tlsAlias));
+ }
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;
cleanup:
VIR_FREE(charAlias);
VIR_FREE(objAlias);
+ VIR_FREE(tlsAlias);
return ret;
}