[Spice-devel] [spice-gtk 04/13] usb-redir: do not add device if one with the same bus:addr exists
Yuri Benditovich
yuri.benditovich at daynix.com
Sun Mar 10 14:46:03 UTC 2019
In initial device enumeration hotplug notification can be
called twice with the same libusb device. For details, see
http://libusb.sourceforge.net/api-1.0/group__libusb__hotplug.html#ga00e0c69ddf1fb1b6774dc918192e8dc7
Filter out devices that already present in the list.
Remove indentical call in spice_usb_device_manager_add_udev,
which add devices under Windows.
Signed-off-by: Yuri Benditovich <yuri.benditovich at daynix.com>
---
src/usb-device-manager.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
index debba4d..5cf7ebb 100644
--- a/src/usb-device-manager.c
+++ b/src/usb-device-manager.c
@@ -962,6 +962,17 @@ static void spice_usb_device_manager_add_dev(SpiceUsbDeviceManager *self,
if (desc.bDeviceClass == LIBUSB_CLASS_HUB)
return;
+ if (spice_usb_device_manager_find_device(self,
+ libusb_get_bus_number(libdev),
+ libusb_get_device_address(libdev))) {
+ SPICE_DEBUG("device not added %d:%d %04x:%04x",
+ libusb_get_bus_number(libdev),
+ libusb_get_device_address(libdev),
+ desc.idVendor,
+ desc.idProduct);
+ return;
+ }
+
device = (SpiceUsbDevice*)spice_usb_device_new(libdev);
if (!device)
return;
@@ -1025,7 +1036,6 @@ static void spice_usb_device_manager_add_udev(SpiceUsbDeviceManager *self,
{
SpiceUsbDeviceManagerPrivate *priv = self->priv;
libusb_device *libdev = NULL, **dev_list = NULL;
- SpiceUsbDevice *device;
const gchar *devtype;
int i, bus, address;
@@ -1039,16 +1049,6 @@ static void spice_usb_device_manager_add_udev(SpiceUsbDeviceManager *self,
return;
}
- device = spice_usb_device_manager_find_device(self, bus, address);
- if (device) {
- SPICE_DEBUG("USB device 0x%04x:0x%04x at %d.%d already exists, ignored",
- spice_usb_device_get_vid(device),
- spice_usb_device_get_pid(device),
- spice_usb_device_get_busnum(device),
- spice_usb_device_get_devaddr(device));
- return;
- }
-
if (priv->coldplug_list)
dev_list = priv->coldplug_list;
else
--
2.17.1
More information about the Spice-devel
mailing list