[Spice-devel] [PATCH 2/5] WinUsbDev: add redirecting state to GUdevClientPrivate
Christophe Fergeau
cfergeau at redhat.com
Fri Jul 3 05:56:20 PDT 2015
On Thu, Jul 02, 2015 at 04:41:32PM +0300, Kirill Moizik wrote:
> we need to add redirecting state to singleton since wnd_proc callback should not query usb devices
> in the middle of redirecting flow.
Why ?
>GUdevClient is the only context exist in the cb, so we should add a stateand update it accordingly.
>
> Signed-off-by: Kirill Moizik <kirill at daynix.com>
> ---
> src/map-file | 2 ++
> src/win-usb-dev.c | 15 +++++++++++++++
> src/win-usb-dev.h | 2 ++
> 3 files changed, 19 insertions(+)
>
> diff --git a/src/map-file b/src/map-file
> index d3a079e..f9883b2 100644
> --- a/src/map-file
> +++ b/src/map-file
> @@ -117,6 +117,8 @@ spice_uri_to_string;
> spice_usb_device_get_description;
> spice_usb_device_get_libusb_device;
> spice_usb_device_get_type;
> +spice_g_udev_set_redirecting;
> +spice_g_udev_handle_device_change;
> spice_usb_device_manager_set_redirecting;
> spice_usb_device_manager_get_redirecting;
> spice_usb_device_manager_can_redirect_device;
> diff --git a/src/win-usb-dev.c b/src/win-usb-dev.c
> index 1e4b2d6..23bea42 100644
> --- a/src/win-usb-dev.c
> +++ b/src/win-usb-dev.c
> @@ -37,6 +37,7 @@ struct _GUdevClientPrivate {
> gssize udev_list_size;
> GList *udev_list;
> HWND hwnd;
> + gboolean redirecting;
> };
>
> #define G_UDEV_CLIENT_WINCLASS_NAME TEXT("G_UDEV_CLIENT")
> @@ -186,6 +187,7 @@ g_udev_client_initable_init(GInitable *initable, GCancellable *cancellable,
> self = G_UDEV_CLIENT(initable);
> priv = self->priv;
>
> + priv->redirecting = FALSE;
> rc = libusb_init(&priv->ctx);
> if (rc < 0) {
> const char *errstr = spice_usbutil_libusb_strerror(rc);
> @@ -334,6 +336,11 @@ static gboolean gudev_devices_are_equal(GUdevDevice *a, GUdevDevice *b)
> return (same_pid && same_vid);
> }
>
> +void spice_g_udev_set_redirecting (gboolean val)
> +{
> + GUdevClientPrivate *priv = singleton->priv;
> + priv->redirecting = val;
> +}
>
> /* Assumes each event stands for a single device change (at most) */
> static void handle_dev_change(GUdevClient *self)
> @@ -347,6 +354,9 @@ static void handle_dev_change(GUdevClient *self)
> GList *llist, *slist; /* long-list and short-list*/
> GList *lit, *sit; /* iterators for long-list and short-list */
> GUdevDevice *ldev, *sdev; /* devices on long-list and short-list */
> + if (priv->redirecting == TRUE) {
if (priv->redirecting) {
}
> + return;
> + }
>
> dev_count = g_udev_client_list_devices(self, &now_devs, &err,
> __FUNCTION__);
> @@ -409,6 +419,11 @@ leave:
> priv->udev_list_size = dev_count;
> }
>
> +void spice_g_udev_handle_device_change(void)
> +{
> + handle_dev_change(singleton);
> +}
> +
> static LRESULT CALLBACK wnd_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
> {
> /* Only DBT_DEVNODES_CHANGED recieved */
> diff --git a/src/win-usb-dev.h b/src/win-usb-dev.h
> index b5c4fce..080c89f 100644
> --- a/src/win-usb-dev.h
> +++ b/src/win-usb-dev.h
> @@ -86,6 +86,8 @@ GType g_udev_device_get_type(void) G_GNUC_CONST;
> const gchar *g_udev_device_get_property(GUdevDevice *udev, const gchar *property);
> const gchar *g_udev_device_get_sysfs_attr(GUdevDevice *udev, const gchar *attr);
>
> +void spice_g_udev_set_redirecting(gboolean val);
> +void spice_g_udev_handle_device_change(void);
> GQuark g_udev_client_error_quark(void);
> #define G_UDEV_CLIENT_ERROR g_udev_client_error_quark()
>
> --
> 2.1.0
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150703/16028a5e/attachment.sig>
More information about the Spice-devel
mailing list