[Spice-devel] [spice-gtk v1 2/3] main: migration: check return value to count channels

Frediano Ziglio fziglio at redhat.com
Thu Sep 5 07:51:40 UTC 2019


> 
> From: Victor Toso <me at victortoso.com>
> 
> Although spice_channel_connect() works in idle, if it returns false
> it'll not emit any signal further and we would be counting a
> 'connected' channel that wouldn't be emitting anything.
> 
> As other callbacks take this in consideration, we should only
> increment the counter if we reached spice-channel::connect_delayed()
> callback.
> 
> Signed-off-by: Victor Toso <victortoso at redhat.com>
> ---
>  src/channel-main.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/src/channel-main.c b/src/channel-main.c
> index a1e5498..3d1b1b5 100644
> --- a/src/channel-main.c
> +++ b/src/channel-main.c
> @@ -2174,8 +2174,9 @@ migrate_channel_connect(spice_migrate *mig, int type,
> int id)
>      SPICE_DEBUG("migrate_channel_connect %d:%d", type, id);
>  
>      SpiceChannel *newc = spice_channel_new(mig->session, type, id);
> -    spice_channel_connect(newc);
> -    mig->nchannels++;
> +    if (newc != NULL && spice_channel_connect(newc)) {
> +        mig->nchannels++;
> +    }
>  }
>  
>  /* coroutine context */

Acked-by: Frediano Ziglio <fziglio at redhat.com>

It makes sense but if spice_channel_connect for any reason fails the channel
will go to unconnected state and we will "forget" the pointer so basically
looks like a leak.
At least I would expect that if I attempt to disconnect it the object
is freed.

Frediano


More information about the Spice-devel mailing list