Re: [PATCH v3 08/13] Usbredir channel: use disconnect_async

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In the subject line, I'd only use "usbredir: disconnect USB device
asynchronously"

In the commit log, there should be an explanation why it's ok to do
that, and why the rest of the code is going to be able to deal with
disconnection being asynchronous.

Why are spice_usbredir_channel_dispose() and device_error() not using an
async disconnection?

Christophe

On Mon, Aug 03, 2015 at 04:10:48PM +0300, Kirill Moizik wrote:
> From: Kirill Moizik <kmoizik@xxxxxxxxxx>
> 
> ---
>  src/channel-usbredir.c | 41 +++++++++++++++++++++++++++++++++++------
>  1 file changed, 35 insertions(+), 6 deletions(-)
> 
> diff --git a/src/channel-usbredir.c b/src/channel-usbredir.c
> index 4cf1173..699b845 100644
> --- a/src/channel-usbredir.c
> +++ b/src/channel-usbredir.c
> @@ -114,20 +114,49 @@ static void spice_usbredir_channel_init(SpiceUsbredirChannel *channel)
>  }
>  
>  #ifdef USE_USBREDIR
> +typedef struct _reset_cb_data
> +{
> +    gboolean migrating;
> +} reset_cb_data;
> +
> +static void spice_usbredir_channel_reset_cb(GObject *gobject,
> +                                            GAsyncResult *result,
> +                                            gpointer user_data)
> +{
> +    SpiceChannel *spiceChannel =  SPICE_CHANNEL(gobject);
> +    SpiceUsbredirChannel *channel = SPICE_USBREDIR_CHANNEL(spiceChannel);
> +    SpiceUsbredirChannelPrivate *priv = channel->priv;
> +    g_mutex_lock(priv->flows_mutex);
> +    reset_cb_data *data = user_data;
> +
> +    usbredirhost_close(priv->host);
> +    priv->host = NULL;
> +    /* Call set_context to re-create the host */
> +    spice_usbredir_channel_set_context(channel, priv->context);
> +    SPICE_CHANNEL_CLASS(spice_usbredir_channel_parent_class)->channel_reset(spiceChannel, data->migrating);
> +    g_mutex_unlock(priv->flows_mutex);
> +    g_object_unref(result);
> +    g_free(data);
> +}
> +
>  static void spice_usbredir_channel_reset(SpiceChannel *c, gboolean migrating)
>  {
>      SpiceUsbredirChannel *channel = SPICE_USBREDIR_CHANNEL(c);
>      SpiceUsbredirChannelPrivate *priv = channel->priv;
>  
> +    GSimpleAsyncResult *result ;
>      if (priv->host) {
> -        if (priv->state == STATE_CONNECTED)
> +        if (priv->state == STATE_CONNECTED){
> +            reset_cb_data *data = g_new(reset_cb_data,1);
> +            data->migrating = migrating;
> +            result = g_simple_async_result_new(G_OBJECT(c),
> +                       spice_usbredir_channel_reset_cb, data,
> +                       spice_usbredir_channel_reset);
>              spice_usbredir_channel_disconnect_device_async(channel, result, NULL);
> -        usbredirhost_close(priv->host);
> -        priv->host = NULL;
> -        /* Call set_context to re-create the host */
> -        spice_usbredir_channel_set_context(channel, priv->context);
> +        }
> +    } else {
> +        SPICE_CHANNEL_CLASS(spice_usbredir_channel_parent_class)->channel_reset(c, migrating);
>      }
> -    SPICE_CHANNEL_CLASS(spice_usbredir_channel_parent_class)->channel_reset(c, migrating);
>  }
>  #endif
>  
> -- 
> 2.4.3
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel@xxxxxxxxxxxxxxxxxxxxx
> http://lists.freedesktop.org/mailman/listinfo/spice-devel

Attachment: pgpD64SU7R0AT.pgp
Description: PGP signature

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]