On 8/3/23 12:36, Michal Privoznik wrote: > 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 <mprivozn@xxxxxxxxxx> Reviewed-by: Claudio Fontana <cfontana@xxxxxxx> > --- > 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)