mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-01 17:35:17 +00:00
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 <mprivozn@redhat.com> Reviewed-by: Claudio Fontana <cfontana@suse.de>
This commit is contained in:
parent
039b16e41e
commit
5aba198687
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user