[Spice-devel] [PATCH v6 09/14] UsbDeviceManager: Track device disconnection operations in progress

Dmitry Fleytman dmitry at daynix.com
Sun Feb 28 09:54:19 UTC 2016


From: Kirill Moizik <kmoizik at redhat.com>

During device disconnection, unwanted hotplug events may happen.
We need to ignore those therefore we track disconnection operations
in progress.

See also comment to commit
"Do not process USB hotplug events while redirection is in progress"
that introduces corresponding filtering out logic.

Signed-off-by: Kirill Moizik <kmoizik at redhat.com>
Signed-off-by: Dmitry Fleytman <dfleytma at redhat.com>
---
 src/usb-device-manager.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
index 93e095a..7a90a2a 100644
--- a/src/usb-device-manager.c
+++ b/src/usb-device-manager.c
@@ -1721,20 +1721,22 @@ void _disconnect_device_async_cb(GObject *gobject,
     SpiceUsbredirChannel  *channel = SPICE_USBREDIR_CHANNEL(gobject);
     disconnect_cb_data    *data    = user_data;
     GSimpleAsyncResult    *result  = G_SIMPLE_ASYNC_RESULT(data->result);
+    SpiceUsbDeviceManager *self = SPICE_USB_DEVICE_MANAGER(data->self);
     GError *err = NULL;
 
 #ifdef G_OS_WIN32
-    SpiceUsbDeviceManager *self = SPICE_USB_DEVICE_MANAGER(data->self);
-
     if (self->priv->use_usbclerk) {
         _spice_usb_device_manager_uninstall_driver_async(self, data->device);
     }
 #endif
 
+    _set_redirecting(self, FALSE);
+
     spice_usbredir_channel_disconnect_device_finish(channel, channel_res, &err);
     if (err) {
         g_simple_async_result_take_error(result, err);
     }
+
     g_simple_async_result_complete(result);
     g_object_unref(result);
     g_free(data);
@@ -1757,6 +1759,8 @@ void spice_usb_device_manager_disconnect_device_async(SpiceUsbDeviceManager *sel
 
     SpiceUsbredirChannel *channel;
 
+    _set_redirecting(self, TRUE);
+
     channel = spice_usb_device_manager_get_channel_for_dev(self, device);
     nested  = g_simple_async_result_new(G_OBJECT(self), callback, user_data,
                               spice_usb_device_manager_disconnect_device_async);
-- 
2.5.0



More information about the Spice-devel mailing list