From 5aba19868732e86e610d84e11d8adcbd1046d5b9 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Thu, 3 Aug 2023 08:52:57 +0200 Subject: [PATCH] qemu: Don't reuse variable in processSerialChangedEvent() When a VSERPORT_CHANGE event is processed, we firstly do a little detour and try to detect whether the event is coming from guest agent. If so, we notify threads that are currently talking to the agent about this fact. Then we proceed with usual event processing (BeginJob(), update domain def, emit event, and so on). In both cases we use the same @dev variable to refer to domain device. While this works, it will make writing semantic patch unnecessary harder (see next commit(s)). Therefore, introduce a separate variable for the detour code. Signed-off-by: Michal Privoznik Reviewed-by: Claudio Fontana --- src/qemu/qemu_driver.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 1d7b78d73b..1f388306f4 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -3781,20 +3781,19 @@ processSerialChangedEvent(virQEMUDriver *driver, if (newstate == VIR_DOMAIN_CHR_DEVICE_STATE_DISCONNECTED && virDomainObjIsActive(vm) && priv->agent) { + virDomainDeviceDef agentDev; + /* peek into the domain definition to find the channel */ - if (virDomainDefFindDevice(vm->def, devAlias, &dev, true) == 0 && - dev.type == VIR_DOMAIN_DEVICE_CHR && - dev.data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && - dev.data.chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO && - STREQ_NULLABLE(dev.data.chr->target.name, "org.qemu.guest_agent.0")) + if (virDomainDefFindDevice(vm->def, devAlias, &agentDev, true) == 0 && + agentDev.type == VIR_DOMAIN_DEVICE_CHR && + agentDev.data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL && + agentDev.data.chr->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO && + STREQ_NULLABLE(agentDev.data.chr->target.name, "org.qemu.guest_agent.0")) { /* Close agent monitor early, so that other threads * waiting for the agent to reply can finish and our * job we acquire below can succeed. */ qemuAgentNotifyClose(priv->agent); - - /* now discard the data, since it may possibly change once we unlock - * while entering the job */ - memset(&dev, 0, sizeof(dev)); + } } if (virDomainObjBeginJob(vm, VIR_JOB_MODIFY_MIGRATION_SAFE) < 0) -- 2.47.3