[Spice-devel] [spice-gtk 03/13] usb-redir: reuse libusb context under Windows
Christophe Fergeau
cfergeau at redhat.com
Mon Mar 11 17:14:15 UTC 2019
On Sun, Mar 10, 2019 at 04:46:02PM +0200, Yuri Benditovich wrote:
> Do not create own libusb context in usb-device-manager.
> Reuse existing context created by win-usb-dev instead.
I'd rephrase this slightly
« On Windows, do not create a new libusb context in
usb-device-manager.c, but reuse the existing one created by
win-usb-dev.c » + an explanation why we want to do that.
Iirc, we need a shared libusb_context if we want to share libusb_device
between the 2 files, so I'd add that to the commit log.
Apart from this,
Acked-by: Christophe Fergeau <cfergeau at redhat.com>
>
> Signed-off-by: Yuri Benditovich <yuri.benditovich at daynix.com>
> ---
> src/usb-device-manager.c | 11 +++++------
> src/win-usb-dev.c | 4 ++++
> src/win-usb-dev.h | 1 +
> 3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
> index 6435be8..debba4d 100644
> --- a/src/usb-device-manager.c
> +++ b/src/usb-device-manager.c
> @@ -282,8 +282,9 @@ static gboolean spice_usb_device_manager_initable_init(GInitable *initable,
> SpiceUsbDeviceManagerPrivate *priv = self->priv;
> GList *list;
> GList *it;
> - int rc;
>
> +#ifndef G_OS_WIN32
> + int rc;
> /* Initialize libusb */
> rc = libusb_init(&priv->context);
> if (rc < 0) {
> @@ -293,11 +294,6 @@ static gboolean spice_usb_device_manager_initable_init(GInitable *initable,
> "Error initializing USB support: %s [%i]", desc, rc);
> return FALSE;
> }
> -
> -#ifdef G_OS_WIN32
> -#if LIBUSB_API_VERSION >= 0x01000106
> - libusb_set_option(priv->context, LIBUSB_OPTION_USE_USBDK);
> -#endif
> #endif
>
> /* Start listening for usb devices plug / unplug */
> @@ -307,6 +303,7 @@ static gboolean spice_usb_device_manager_initable_init(GInitable *initable,
> g_warning("Error initializing GUdevClient");
> return FALSE;
> }
> + priv->context = g_udev_client_get_context(priv->udev);
> g_signal_connect(G_OBJECT(priv->udev), "uevent",
> G_CALLBACK(spice_usb_device_manager_uevent_cb), self);
> /* Do coldplug (detection of already connected devices) */
> @@ -402,8 +399,10 @@ static void spice_usb_device_manager_finalize(GObject *gobject)
> g_clear_object(&priv->udev);
> #endif
> g_return_if_fail(priv->event_thread == NULL);
> +#ifndef G_OS_WIN32
> if (priv->context)
> libusb_exit(priv->context);
> +#endif
> free(priv->auto_conn_filter_rules);
> free(priv->redirect_on_connect_rules);
> #ifdef G_OS_WIN32
> diff --git a/src/win-usb-dev.c b/src/win-usb-dev.c
> index d0eae06..a8d922f 100644
> --- a/src/win-usb-dev.c
> +++ b/src/win-usb-dev.c
> @@ -113,6 +113,10 @@ GUdevClient *g_udev_client_new(void)
> return singleton;
> }
>
> +libusb_context *g_udev_client_get_context(GUdevClient *client)
> +{
> + return client->priv->ctx;
> +}
>
> /*
> * devs [in,out] an empty devs list in, full devs list out
> diff --git a/src/win-usb-dev.h b/src/win-usb-dev.h
> index 0f34a01..f3c7466 100644
> --- a/src/win-usb-dev.h
> +++ b/src/win-usb-dev.h
> @@ -80,6 +80,7 @@ struct _GUdevClientClass
>
> GType g_udev_client_get_type(void) G_GNUC_CONST;
> GUdevClient *g_udev_client_new(void);
> +libusb_context *g_udev_client_get_context(GUdevClient *client);
> GList *g_udev_client_query_by_subsystem(GUdevClient *client, const gchar *subsystem);
>
> GType g_udev_device_get_type(void) G_GNUC_CONST;
> --
> 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/20190311/05ad3e52/attachment.sig>
More information about the Spice-devel
mailing list