[Spice-devel] [PATCH spice-server 4/6] red-channel-client: Move incoming/ougoing initialization to constructor

Frediano Ziglio fziglio at redhat.com
Mon Oct 31 10:10:59 UTC 2016


> 
> On Fri, Oct 28, 2016 at 11:59:54AM +0100, Frediano Ziglio wrote:
> > These fields need just channel to be set to be initialized.
> > Move their initialization to constructor to make sure
> > they are initialized as soon as possible.
> 
> Why?
> 


Read previous reply to "red-channel-client: Init pipe field during init".
To sum up current code could lead to use of not initialized fields due to order
changes introduced.

> Not related to this patch, but I'm not sure initializing pos and size to
> 0 is required, 'priv' will be memset to 0 upon creation.
> 
> Christophe
> 

I just moved the code.
I think would be better to remove with another patch if you like to.

Frediano

> > 
> > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > ---
> >  server/dummy-channel-client.c |  2 --
> >  server/red-channel-client.c   | 18 +++++++++---------
> >  2 files changed, 9 insertions(+), 11 deletions(-)
> > 
> > diff --git a/server/dummy-channel-client.c b/server/dummy-channel-client.c
> > index b7fee6f..a242d51 100644
> > --- a/server/dummy-channel-client.c
> > +++ b/server/dummy-channel-client.c
> > @@ -70,8 +70,6 @@ static gboolean
> > dummy_channel_client_initable_init(GInitable *initable,
> >          goto cleanup;
> >      }
> >  
> > -    rcc->incoming.header.data = rcc->incoming.header_buf;
> > -
> >      red_channel_add_client(channel, rcc);
> >      red_client_add_channel(client, rcc);
> >  
> > diff --git a/server/red-channel-client.c b/server/red-channel-client.c
> > index 3b2c24c..6c78237 100644
> > --- a/server/red-channel-client.c
> > +++ b/server/red-channel-client.c
> > @@ -269,6 +269,14 @@ static void red_channel_client_constructed(GObject
> > *object)
> >  {
> >      RedChannelClient *self =  RED_CHANNEL_CLIENT(object);
> >  
> > +    self->incoming.opaque = self;
> > +    self->incoming.cb =
> > red_channel_get_incoming_handler(self->priv->channel);
> > +
> > +    self->priv->outgoing.opaque = self;
> > +    self->priv->outgoing.cb =
> > red_channel_get_outgoing_handler(self->priv->channel);
> > +    self->priv->outgoing.pos = 0;
> > +    self->priv->outgoing.size = 0;
> > +
> >      if (red_channel_client_test_remote_common_cap(self,
> >      SPICE_COMMON_CAP_MINI_HEADER)) {
> >          self->incoming.header = mini_header_wrapper;
> >          self->priv->send_data.header = mini_header_wrapper;
> > @@ -278,6 +286,7 @@ static void red_channel_client_constructed(GObject
> > *object)
> >          self->priv->send_data.header = full_header_wrapper;
> >          self->priv->is_mini_header = FALSE;
> >      }
> > +    self->incoming.header.data = self->incoming.header_buf;
> >  }
> >  
> >  static void red_channel_client_class_init(RedChannelClientClass *klass)
> > @@ -900,15 +909,6 @@ static gboolean
> > red_channel_client_initable_init(GInitable *initable,
> >          self->priv->latency_monitor.roundtrip = -1;
> >      }
> >  
> > -    self->incoming.opaque = self;
> > -    self->incoming.cb =
> > red_channel_get_incoming_handler(self->priv->channel);
> > -    self->incoming.header.data = self->incoming.header_buf;
> > -
> > -    self->priv->outgoing.opaque = self;
> > -    self->priv->outgoing.cb =
> > red_channel_get_outgoing_handler(self->priv->channel);
> > -    self->priv->outgoing.pos = 0;
> > -    self->priv->outgoing.size = 0;
> > -
> >      if (self->priv->stream)
> >          self->priv->stream->watch =
> >              core->watch_add(core, self->priv->stream->socket,



More information about the Spice-devel mailing list