[Spice-devel] [PATCH spice-server] reds: Check we don't register a channel twice in reds_register_channel

Frediano Ziglio fziglio at redhat.com
Mon Mar 18 10:54:28 UTC 2019


> On 3/18/19 12:12 PM, Frediano Ziglio wrote:
> >> Hi,
> >>
> >> On 3/15/19 11:27 AM, Frediano Ziglio wrote:
> >>> To avoid possibly regression check it only if extra checks are
> >>> enabled.
> >>
> >> Currently there's already a "channel duplication" warning upon connection
> >> but won't hurt to have this extra check and emit an error.
> >>
> > I cannot find it. This patch is for spice-server.
> 
> 
> Oh, sorry, "duplicate channel" on red_client_add_channel
> 

These functions are checking RedChannelClient, not RedChannel.
Basically they check if client is connecting twice to the same
channel.

> 
> >
> >>> This allowed to check previous "Move channel registration to constructed
> >>
> >> This allow/s? i don't get this sentence, it just avoids duplicate call.
> >> I think
> >> i'd not even mention the previous commit
> >>
> > No, it will also exit the program if this condition is met.
> 
> 
> Yes, i got it, i meant that such patch would have make sense also before
> the "Move channel reg.." commit,
> so not necessarily need to mention it.
> 

Yes, I suppose would have made sense even before.
But that's the reason why I added it and how I used it.

> 
> 
> >
> >> Snir.
> >>
> >>> vfunc" commit.
> >>>
> >>> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> >>> ---
> >>>    server/reds.c | 5 +++++
> >>>    1 file changed, 5 insertions(+)
> >>>
> >>> diff --git a/server/reds.c b/server/reds.c
> >>> index 429f8142..e182eba7 100644
> >>> --- a/server/reds.c
> >>> +++ b/server/reds.c
> >>> @@ -380,6 +380,11 @@ void stat_remove_counter(SpiceServer *reds,
> >>> RedStatCounter *counter)
> >>>    void reds_register_channel(RedsState *reds, RedChannel *channel)
> >>>    {
> >>>        spice_assert(reds);
> >>> +    if (spice_extra_checks) {
> >>> +        uint32_t this_type, this_id;
> >>> +        g_object_get(channel, "channel-type", &this_type, "id",
> >>> &this_id,
> >>> NULL);
> >>> +        spice_assert(reds_find_channel(reds, this_type, this_id) ==
> >>> NULL);
> >>> +    }
> >>>        reds->channels = g_list_prepend(reds->channels, channel);
> >>>        // create new channel in the client if possible
> >>>        main_channel_registered_new_channel(reds->main_channel, channel);
> > Frediano
> 


More information about the Spice-devel mailing list