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 <mpriv...@redhat.com>

Reviewed-by: Claudio Fontana <cfont...@suse.de>

> ---
>  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)

Reply via email to