[Spice-devel] [PATCH v2 2/6] WinUsbDev: add redirecting state to GUdevClientPrivate

Christophe Fergeau cfergeau at redhat.com
Tue Jul 7 04:13:33 PDT 2015


On Tue, Jul 07, 2015 at 01:57:45PM +0300, Kirill Moizik wrote:
> > >
> > > +void spice_g_udev_set_redirecting (gboolean val)
> > > +{
> > > +    GUdevClientPrivate *priv = singleton->priv;
> > > +    priv->redirecting = val;
> > > +}
> >
> > I still think we should have something like
> > if (priv->redirecting && !val) {
> >     handle_dev_change(singleton);
> > }
> >
> > and not export spice_g_udev_handle_device_change() as updating the
> > device list is required anyway when redirecting changes from TRUE to
> > FALSE. Doing it automatically makes using the API less error-prone...
> >
> >
> The problem is not to prevent call  handle_dev_change from  the
> usb-device-widget.c
> I agree with you here, in this case it is better solution. The problem is
> here
> 
> static LRESULT CALLBACK wnd_proc(HWND hwnd, UINT message, WPARAM wparam,
> LPARAM lparam)
> 
> {
> 
>     /* Only DBT_DEVNODES_CHANGED recieved */
> 
>     if (message == WM_DEVICECHANGE) {
> 
>         handle_dev_change(singleton);
> 
>     }
> 
>     return DefWindowProc(hwnd, message, wparam, lparam);
> 
> }
> 
> 
> It is a registered system callback. The only context available when it is
> called is GUdevClient singleton object.

I'm not sure I made myself clear, see the attached patch for what I'm
suggesting.

Christophe

-------------- next part --------------
diff --git a/src/map-file b/src/map-file
index d14a18d..2b938c7 100644
--- a/src/map-file
+++ b/src/map-file
@@ -118,7 +118,6 @@ 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_disconnect_device_async;
 spice_usb_device_manager_can_redirect_device;
 spice_usb_device_manager_connect_device_async;
diff --git a/src/usb-device-widget.c b/src/usb-device-widget.c
index 85f3057..78a4723 100644
--- a/src/usb-device-widget.c
+++ b/src/usb-device-widget.c
@@ -460,9 +460,6 @@ static void set_redirecting(SpiceUsbDeviceWidget *self, gboolean val)
                                      GTK_MESSAGE_INFO,
                                      GTK_STOCK_DIALOG_INFO);
     } else {
-#ifndef USE_LIBUSB_HOTPLUG
-        spice_g_udev_handle_device_change();
-#endif
         spice_usb_device_widget_hide_info_bar(self);
     }
     gtk_container_foreach(GTK_CONTAINER(self),
diff --git a/src/win-usb-dev.c b/src/win-usb-dev.c
index 23bea42..c42273f 100644
--- a/src/win-usb-dev.c
+++ b/src/win-usb-dev.c
@@ -336,10 +336,16 @@ static gboolean gudev_devices_are_equal(GUdevDevice *a, GUdevDevice *b)
     return (same_pid && same_vid);
 }
 
-void spice_g_udev_set_redirecting (gboolean val)
+static void handle_dev_change(GUdevClient *self);
+
+void spice_g_udev_set_redirecting(gboolean val)
 {
     GUdevClientPrivate *priv = singleton->priv;
+    gboolean redirecting_end;
+    redirecting_end = (priv->redirecting && !val);
     priv->redirecting = val;
+    if (redirecting_end)
+        handle_dev_change(singleton);
 }
 
 /* Assumes each event stands for a single device change (at most) */
@@ -419,11 +425,6 @@ 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 080c89f..d656e73 100644
--- a/src/win-usb-dev.h
+++ b/src/win-usb-dev.h
@@ -87,7 +87,6 @@ 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()
 
-------------- 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/20150707/76bc8905/attachment.sig>


More information about the Spice-devel mailing list