[Spice-devel] [PATCH v6 09/10] win-usbredir: Do not use UsbClerk for non-WinUsb backends
Dmitry Fleytman
dmitry at daynix.com
Thu Oct 29 08:26:44 PDT 2015
Signed-off-by: Dmitry Fleytman <dmitry at daynix.com>
---
src/usb-device-manager.c | 50 ++++++++++++++++++++++++++++++------------------
1 file changed, 31 insertions(+), 19 deletions(-)
diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
index d5fec8f..53820b4 100644
--- a/src/usb-device-manager.c
+++ b/src/usb-device-manager.c
@@ -230,7 +230,7 @@ static void spice_usb_device_manager_init(SpiceUsbDeviceManager *self)
priv = SPICE_USB_DEVICE_MANAGER_GET_PRIVATE(self);
self->priv = priv;
-#ifdef G_OS_WIN32
+#if defined(G_OS_WIN32) && defined(USE_USBREDIR)
priv->use_usbclerk = TRUE;
#endif
priv->channels = g_ptr_array_new();
@@ -255,10 +255,12 @@ static gboolean spice_usb_device_manager_initable_init(GInitable *initable,
#endif
#ifdef G_OS_WIN32
- priv->installer = spice_win_usb_driver_new(err);
- if (!priv->installer) {
- SPICE_DEBUG("failed to initialize winusb driver");
- return FALSE;
+ if (priv->use_usbclerk) {
+ priv->installer = spice_win_usb_driver_new(err);
+ if (!priv->installer) {
+ SPICE_DEBUG("failed to initialize winusb driver");
+ return FALSE;
+ }
}
#endif
@@ -365,15 +367,17 @@ static void spice_usb_device_manager_finalize(GObject *gobject)
free(priv->auto_conn_filter_rules);
free(priv->redirect_on_connect_rules);
#ifdef G_OS_WIN32
- if (priv->installer)
+ if (priv->installer) {
+ g_warn_if_fail(priv->use_usbclerk);
g_object_unref(priv->installer);
+ }
#endif
#endif
g_free(priv->auto_connect_filter);
g_free(priv->redirect_on_connect);
-#ifdef G_OS_WIN32
+#if defined(G_OS_WIN32) && defined(USE_USBREDIR)
if (!priv->use_usbclerk) {
if(priv->auto_connect)
_usbdk_autoredir_disable(self);
@@ -430,7 +434,7 @@ static void spice_usb_device_manager_set_property(GObject *gobject,
break;
case PROP_AUTO_CONNECT:
priv->auto_connect = g_value_get_boolean(value);
-#ifdef G_OS_WIN32
+#if defined(G_OS_WIN32) && defined(USE_USBREDIR)
if (!priv->use_usbclerk) {
if (priv->auto_connect) {
_usbdk_autoredir_enable(self);
@@ -935,12 +939,14 @@ static void spice_usb_device_manager_remove_dev(SpiceUsbDeviceManager *self,
}
#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)) {
- SPICE_DEBUG("skipping " DEV_ID_FMT ". It is un/installing its driver",
- bus, address);
- return;
+ if (priv->use_usbclerk) {
+ const guint8 state = spice_usb_device_get_state(device);
+ if ((state == SPICE_USB_DEVICE_STATE_INSTALLING) ||
+ (state == SPICE_USB_DEVICE_STATE_UNINSTALLING)) {
+ SPICE_DEBUG("skipping " DEV_ID_FMT ". It is un/installing its driver",
+ bus, address);
+ return;
+ }
}
#endif
@@ -1141,6 +1147,7 @@ static void spice_usb_device_manager_drv_install_cb(GObject *gobject,
g_free(cbinfo);
g_return_if_fail(SPICE_IS_USB_DEVICE_MANAGER(self));
+ g_return_if_fail(self->priv->use_usbclerk);
g_return_if_fail(SPICE_IS_WIN_USB_DRIVER(installer));
g_return_if_fail(device!= NULL);
@@ -1173,6 +1180,7 @@ static void spice_usb_device_manager_drv_uninstall_cb(GObject *gobject,
SPICE_DEBUG("Win USB driver uninstall finished");
g_return_if_fail(SPICE_IS_USB_DEVICE_MANAGER(self));
+ g_return_if_fail(self->priv->use_usbclerk);
if (!spice_win_usb_driver_uninstall_finish(cbinfo->installer, res, &err)) {
g_warning("win usb driver uninstall failed -- %s", err->message);
@@ -1576,15 +1584,18 @@ void spice_usb_device_manager_connect_device_async(SpiceUsbDeviceManager *self,
{
#if defined(USE_USBREDIR) && defined(G_OS_WIN32)
- _spice_usb_device_manager_install_driver_async(self, device, cancellable,
- callback, user_data);
-#else
+ if (self->priv->use_usbclerk) {
+ _spice_usb_device_manager_install_driver_async(self, device, cancellable,
+ callback, user_data);
+ return;
+ }
+#endif
+
_spice_usb_device_manager_connect_device_async(self,
device,
cancellable,
callback,
user_data);
-#endif
}
/**
@@ -1637,7 +1648,8 @@ void spice_usb_device_manager_disconnect_device(SpiceUsbDeviceManager *self,
spice_usbredir_channel_disconnect_device(channel);
#ifdef G_OS_WIN32
- _spice_usb_device_manager_uninstall_driver_async(self, device);
+ if(self->priv->use_usbclerk)
+ _spice_usb_device_manager_uninstall_driver_async(self, device);
#endif
#endif
--
2.4.3
More information about the Spice-devel
mailing list