[Spice-devel] [PATCH v4 04/16] GUdevClient: Do not process USB hotplug events while redirection is in progress
Dmitry Fleytman
dmitry at daynix.com
Thu Oct 29 07:39:17 PDT 2015
-----------------------------------
Daynix Computing LTD
Dmitry Fleytman, CTO
Email: dmitry at daynix.com <mailto:yan at daynix.com>
Phone: +972-54-2819481
Web: www.daynix.com <http://www.daynix.com/>
> On 22 Sep 2015, at 18:52 PM, Christophe Fergeau <cfergeau at redhat.com> wrote:
>
> On Sun, Aug 16, 2015 at 03:35:41PM +0300, Dmitry Fleytman wrote:
>> From: Kirill Moizik <kmoizik at redhat.com <mailto:kmoizik at redhat.com>>
>>
>> USB redirection flow on Windows includes a number of reset requests issued
>> to the port that hosts the device deing redirected.
>>
>> Each port reset emulates device removal and reinsertion and produces
>> corresponding hotplug events and a number of device list updates on
>> different levels of USB stack and USB redirection engine.
>>
>> As a result, queriyng USB device list performed by spice-gtk's hotplug
>> event handler may return inconsistens results if performed in parallel
>
> 'inconsistent'
>
>> to redirection flow.
>>
>> This patch suppresses handling of USB hotplug events during redirection
>> and injects a simulated hotplug event after redirection completion
>> in order to properly process real device list changes in case they
>> happened during the redirection flow.
>>
>> Signed-off-by: Kirill Moizik <kmoizik at redhat.com>
>> Signed-off-by: Dmitry Fleytman <dfleytma at redhat.com>
>> ---
>> src/win-usb-dev.c | 17 +++++++++++++++++
>> 1 file changed, 17 insertions(+)
>>
>> diff --git a/src/win-usb-dev.c b/src/win-usb-dev.c
>> index 60bc434..78f1877 100644
>> --- a/src/win-usb-dev.c
>> +++ b/src/win-usb-dev.c
>> @@ -305,10 +305,18 @@ static void g_udev_client_set_property(GObject *gobject,
>> {
>> GUdevClient *self = G_UDEV_CLIENT(gobject);
>> GUdevClientPrivate *priv = self->priv;
>> + gboolean old_val;
>>
>> switch (prop_id) {
>> case PROP_REDIRECTING:
>> + old_val = priv->redirecting;
>> priv->redirecting = g_value_get_boolean(value);
>> + if (old_val && !priv->redirecting) {
>> + /* This is a redirection completion case.
>> + Inject hotplug event in case we missed device changes
>> + during redirection processing. */
>> + handle_dev_change(self);
>> + }
>> break;
>> default:
>> G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, pspec);
>> @@ -409,6 +417,15 @@ static void handle_dev_change(GUdevClient *self)
>> GList *lit, *sit; /* iterators for long-list and short-list */
>> GUdevDevice *ldev, *sdev; /* devices on long-list and short-list */
>>
>> + if (priv->redirecting == TRUE) {
>> + /* On Windows, queriyng USB device list may return inconsistent results
>
> 'querying'
>
>> + if performed in parallel to redirection flow.
>> + A simulated hotplug event will be injected after redirection
>> + completion in order to process real device list changes that may
>> + had place during redirection process. */
>
> 'had taken place’
All 3 issues fixed. thanks.
>
>> + return;
>> + }
>> +
>> dev_count = g_udev_client_list_devices(self, &now_devs, &err,
>> __FUNCTION__);
>> g_return_if_fail(dev_count >= 0);
>> --
>> 2.4.3
>>
>> _______________________________________________
>> Spice-devel mailing list
>> Spice-devel at lists.freedesktop.org <mailto:Spice-devel at lists.freedesktop.org>
>> http://lists.freedesktop.org/mailman/listinfo/spice-devel <http://lists.freedesktop.org/mailman/listinfo/spice-devel>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20151029/3b622fa1/attachment.html>
More information about the Spice-devel
mailing list