virDomainChrDefPtr chr)
{
virObjectEventPtr event;
+ virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
char *charAlias = NULL;
+ char *tlsAlias = NULL;
qemuDomainObjPrivatePtr priv = vm->privateData;
int ret = -1;
int rc;
if (!(charAlias = qemuAliasChardevFromDevAlias(chr->info.alias)))
goto cleanup;
+ if (chr->source->type == VIR_DOMAIN_CHR_TYPE_TCP &&
+ chr->source->data.tcp.haveTLS == VIR_TRISTATE_BOOL_YES &&
+ !(tlsAlias = qemuAliasTLSObjFromChardevAlias(charAlias)))
+ goto cleanup;
+
qemuDomainObjEnterMonitor(driver, vm);
rc = qemuMonitorDetachCharDev(priv->mon, charAlias);
+
+ if (tlsAlias && qemuMonitorDelObject(priv->mon, tlsAlias) < 0)
+ goto exit_monitor;
+
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;
cleanup:
VIR_FREE(charAlias);
+ VIR_FREE(tlsAlias);
+ virObjectUnref(cfg);
return ret;
+
+ exit_monitor:
+ ignore_value(qemuDomainObjExitMonitor(driver, vm));
+ goto cleanup;
}
virDomainChrDefPtr chr)
{
int ret = -1;
- virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
qemuDomainObjPrivatePtr priv = vm->privateData;
virDomainDefPtr vmdef = vm->def;
virDomainChrDefPtr tmpChr;
- char *objAlias = NULL;
char *devstr = NULL;
- char *charAlias = NULL;
if (!(tmpChr = virDomainChrFind(vmdef, chr))) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
sa_assert(tmpChr->info.alias);
- if (!(charAlias = qemuAliasChardevFromDevAlias(tmpChr->info.alias)))
- goto cleanup;
-
- if (tmpChr->source->type == VIR_DOMAIN_CHR_TYPE_TCP &&
- tmpChr->source->data.tcp.haveTLS == VIR_TRISTATE_BOOL_YES &&
- !(objAlias = qemuAliasTLSObjFromChardevAlias(charAlias)))
- goto cleanup;
-
if (qemuBuildChrDeviceStr(&devstr, vmdef, chr, priv->qemuCaps) < 0)
goto cleanup;
qemuDomainMarkDeviceForRemoval(vm, &tmpChr->info);
qemuDomainObjEnterMonitor(driver, vm);
- if (devstr && qemuMonitorDelDevice(priv->mon, tmpChr->info.alias) < 0)
- goto exit_monitor;
-
- if (objAlias && qemuMonitorDelObject(priv->mon, objAlias) < 0)
- goto exit_monitor;
-
+ if (devstr && qemuMonitorDelDevice(priv->mon, tmpChr->info.alias) < 0) {
+ ignore_value(qemuDomainObjExitMonitor(driver, vm));
+ goto cleanup;
+ }
if (qemuDomainObjExitMonitor(driver, vm) < 0)
goto cleanup;
cleanup:
qemuDomainResetDeviceRemoval(vm);
VIR_FREE(devstr);
- VIR_FREE(charAlias);
- virObjectUnref(cfg);
return ret;
-
- exit_monitor:
- ignore_value(qemuDomainObjExitMonitor(driver, vm));
- goto cleanup;
}