[Spice-devel] [spice-gtk 05/13] win-usb-dev: strict comparison of USB devices

Christophe Fergeau cfergeau at redhat.com
Wed Mar 13 17:25:09 UTC 2019


Hey,

On Sun, Mar 10, 2019 at 04:46:04PM +0200, Yuri Benditovich wrote:
> If on device change the new device has the same bus:address
> as existing device, win-usb-dev does not emit signal of
> device change


Maybe 'If when calling handle_dev_change, the new device has the same
bus:address as an existing device cached in GUdevClient::udev_list,
then an "uevent" signal will not be emitted to notify about the new
device.' ?


>(for example, when due to some reason the
> 'redirecting' property is set for long time and during this
> time one of devices is changed).

I would remove the (), and reformulate a bit: "is set for a long time
and during this time, one device is unplugged and replugged"

For what it's worth, unplugging the device does not make the
cached libusb_device invalid, it can still be queried for its
bus/addr/vid/pid, at least on linux (in short, this indeed looks like
something which could happen).

Acked-by: Christophe Fergeau <cfergeau at redhat.com>


> Make device comparison more strict: check not only bus:addr,
> but also vid:pid.
> 
> Signed-off-by: Yuri Benditovich <yuri.benditovich at daynix.com>
> ---
>  src/win-usb-dev.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/src/win-usb-dev.c b/src/win-usb-dev.c
> index a8d922f..d96e52a 100644
> --- a/src/win-usb-dev.c
> +++ b/src/win-usb-dev.c
> @@ -385,20 +385,21 @@ static gboolean get_usb_dev_info(libusb_device *dev, GUdevDeviceInfo *udevinfo)
>      return TRUE;
>  }
>  
> -/* Only bus:addr are compared */
> +/* comparing bus:addr and vid:pid */
>  static gint gudev_devices_differ(gconstpointer a, gconstpointer b)
>  {
>      GUdevDeviceInfo *ai, *bi;
> -    gboolean same_bus;
> -    gboolean same_addr;
> +    gboolean same_bus, same_addr, same_vid, same_pid;
>  
>      ai = G_UDEV_DEVICE(a)->priv->udevinfo;
>      bi = G_UDEV_DEVICE(b)->priv->udevinfo;
>  
>      same_bus = (ai->bus == bi->bus);
>      same_addr = (ai->addr == bi->addr);
> +    same_vid = (ai->vid == bi->vid);
> +    same_pid = (ai->pid == bi->pid);
>  
> -    return (same_bus && same_addr) ? 0 : -1;
> +    return (same_bus && same_addr && same_vid && same_pid) ? 0 : -1;
>  }
>  
>  static void notify_dev_state_change(GUdevClient *self,
> -- 
> 2.17.1
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20190313/f16d265f/attachment.sig>


More information about the Spice-devel mailing list