[Spice-devel] [spice-gtk v3 2/4] usb-device-manager: Handle connectionless channel

Victor Toso victortoso at redhat.com
Wed Sep 26 10:24:19 UTC 2018


Hi,

Thanks for the quick review!

On Wed, Sep 26, 2018 at 06:15:48AM -0400, Frediano Ziglio wrote:
> > 
> > From: Victor Toso <me at victortoso.com>
> > 
> > As we are not able to redirect anything in case that usbredir channel
> > is not connected.
> > 
> > Related: https://bugzilla.redhat.com/show_bug.cgi?id=1625550
> > Signed-off-by: Victor Toso <victortoso at gnome.org>
> > ---
> >  src/usb-device-manager.c | 31 +++++++++++++++++++++++++++++++
> >  1 file changed, 31 insertions(+)
> > 
> > diff --git a/src/usb-device-manager.c b/src/usb-device-manager.c
> > index 50fb491..8555af5 100644
> > --- a/src/usb-device-manager.c
> > +++ b/src/usb-device-manager.c
> > @@ -158,6 +158,8 @@ static void channel_new(SpiceSession *session,
> > SpiceChannel *channel,
> >                          gpointer user_data);
> >  static void channel_destroy(SpiceSession *session, SpiceChannel *channel,
> >                              gpointer user_data);
> > +static void channel_event(SpiceChannel *channel, SpiceChannelEvent event,
> > +                          gpointer user_data);
> >  #ifdef USE_GUDEV
> >  static void spice_usb_device_manager_uevent_cb(GUdevClient     *client,
> >                                                 const gchar     *action,
> > @@ -849,6 +851,8 @@ static void channel_new(SpiceSession *session,
> > SpiceChannel *channel,
> >      spice_channel_connect(channel);
> >      g_ptr_array_add(self->priv->channels, channel);
> >  
> > +    g_signal_connect(channel, "channel-event", G_CALLBACK(channel_event),
> > self);
> > +
> >      spice_usb_device_manager_check_redir_on_connect(self, channel);
> >  
> >      /*
> > @@ -871,6 +875,33 @@ static void channel_destroy(SpiceSession *session,
> > SpiceChannel *channel,
> >      g_ptr_array_remove(self->priv->channels, channel);
> >  }
> >  
> > +static void channel_event(SpiceChannel *channel, SpiceChannelEvent event,
> > +                          gpointer user_data)
> > +
> > +{
> > +    SpiceUsbDeviceManager *self = user_data;
> > +
> > +    switch (event) {
> > +    case SPICE_CHANNEL_NONE:
> > +    case SPICE_CHANNEL_OPENED:
> > +        return;
> > +
> > +    case SPICE_CHANNEL_SWITCHING:
> > +    case SPICE_CHANNEL_CLOSED:
> > +    case SPICE_CHANNEL_ERROR_CONNECT:
> > +        /* TODO: Maybe reconnect again */
> 
> should not be handled by other code? Why we need a TODO here?

I'll remove the TODO

> 
> > +    case SPICE_CHANNEL_ERROR_TLS:
> > +    case SPICE_CHANNEL_ERROR_LINK:
> > +    case SPICE_CHANNEL_ERROR_AUTH:
> > +    case SPICE_CHANNEL_ERROR_IO:
> > +        g_signal_handlers_disconnect_by_func(channel, channel_event,
> > user_data);
> > +        g_ptr_array_remove(self->priv->channels, channel);
> > +        return;
> > +    default:
> > +        g_warn_if_reached();
> 
> Maybe for safety also remove the channel from the list?

Ok

> 
> > +    }
> > +}
> > +
> >  static void spice_usb_device_manager_auto_connect_cb(GObject      *gobject,
> >                                                       GAsyncResult *res,
> >                                                       gpointer
> >                                                       user_data)
> 
> Otherwise,
> 
> Acked-by: Frediano Ziglio <fziglio at redhat.com>
> 
> Frediano
-------------- 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/20180926/47987a57/attachment.sig>


More information about the Spice-devel mailing list