virBitmapCopy(ret->flags, caps->flags);
+ ret->usedQMP = caps->usedQMP;
ret->version = caps->version;
ret->kvmVersion = caps->kvmVersion;
ret->arch = caps->arch;
virMutexDestroy(&cache->lock);
VIR_FREE(cache);
}
+
+bool
+qemuCapsUsedQMP(qemuCapsPtr caps)
+{
+ return caps->usedQMP;
+}
virHashTablePtr paths)
{
bool chardevfmt = qemuCapsGet(caps, QEMU_CAPS_CHARDEV);
+ int i = 0;
if (qemuProcessLookupPTYs(vm->def->serials, vm->def->nserials,
paths, chardevfmt) < 0)
if (qemuProcessLookupPTYs(vm->def->channels, vm->def->nchannels,
paths, chardevfmt) < 0)
return -1;
+ /* For historical reasons, console[0] can be just an alias
+ * for serial[0]. That's why we need to update it as well. */
+ if (vm->def->nconsoles) {
+ virDomainChrDefPtr chr = vm->def->consoles[0];
+
+ if (vm->def->nserials &&
+ chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
+ chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) {
+ /* yes, the first console is just an alias for serials[0] */
+ i = 1;
+ if (virDomainChrSourceDefCopy(&chr->source,
+ &((vm->def->serials[0])->source)) < 0)
+ return -1;
+ }
+ }
- if (qemuProcessLookupPTYs(vm->def->consoles, vm->def->nconsoles,
+ if (qemuProcessLookupPTYs(vm->def->consoles + i, vm->def->nconsoles - i,
paths, chardevfmt) < 0)
return -1;
virHashTablePtr paths = NULL;
qemuDomainObjPrivatePtr priv;
- if (pos != -1) {
+ if (!qemuCapsUsedQMP(caps) && pos != -1) {
if ((logfd = qemuDomainOpenLog(driver, vm, pos)) < 0)
return -1;