[Spice-devel] [spice-gtk Win32 v5 22/22] usb-device-manager: mingw: ignore "remove" udev event when un/installing a driver
Uri Lublin
uril at redhat.com
Tue Jul 10 05:16:25 PDT 2012
On 07/09/2012 08:24 PM, Marc-André Lureau wrote:
> On Mon, Jul 9, 2012 at 2:15 PM, Uri Lublin<uril at redhat.com> wrote:
>> ---
>> gtk/usb-device-manager.c | 10 ++++++++++
>> 1 files changed, 10 insertions(+), 0 deletions(-)
>>
>> diff --git a/gtk/usb-device-manager.c b/gtk/usb-device-manager.c
>> index 65119ad..2a92ff8 100644
>> --- a/gtk/usb-device-manager.c
>> +++ b/gtk/usb-device-manager.c
>> @@ -719,6 +719,16 @@ static void spice_usb_device_manager_remove_dev(SpiceUsbDeviceManager *self,
>> return;
>> }
>>
>> +#ifdef G_OS_WIN32
>> + const guint8 state = spice_usb_device_get_state(device);
>> + if ((state == SPICE_USB_DEVICE_STATE_INSTALLING) ||
>> + (state == SPICE_USB_DEVICE_STATE_UNINSTALLING)) {
>> + g_warning("skipping device at %d.%d. It is installing it's driver",
>> + bus, address);
>> + return;
>> + }
>> +#endif
> What happens if the device is removed before it is installed or
> uninstalled?
If a device is removed during driver installation (or uninstallation),
we ignore the
udev event. After driver installation, the matching libusb device will
not be found (or
libusb_open it would fail) and usbredir operation would fail.
In such a scenario there is a problem, where usb-device-manager would
keep that
device in it's list, and show it in the usb menu. Re-trying to usbredir
the device would
fail as above.
> Or a simpler case, do we handle correctly removing a
> device currently being redirected? (thinking of unplugged abruptely by
> user physically)
Yes, this is handled correctly.
We probably need a better state machine, and possibly gather more
information before making decisions (e.g. check what driver is installed
when a "device added" event or "device removed" event are received).
Thanks,
Uri.
More information about the Spice-devel
mailing list