[Spice-devel] [PATCH] Guarantee that 'uuid' property is notified after connection

Marc-André Lureau mlureau at redhat.com
Thu Nov 7 09:47:22 PST 2013


----- Original Message -----
> This creates a synchronization point and allows API users to rely on the fact
> that they'll always get a UUID notification before all of the channels are
> created.
> ---
>  gtk/channel-main.c | 10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> diff --git a/gtk/channel-main.c b/gtk/channel-main.c
> index 5c33e67..c2d298e 100644
> --- a/gtk/channel-main.c
> +++ b/gtk/channel-main.c
> @@ -83,6 +83,7 @@ struct _SpiceMainChannelPrivate  {
>      gboolean                    display_disable_animation:1;
>      gboolean                    disable_display_position:1;
>      gboolean                    disable_display_align:1;
> +    gboolean                    did_receive_uuid:1;
>  
>      int                         agent_tokens;
>      VDAgentMessage              agent_msg; /* partial msg reconstruction */
> @@ -1477,12 +1478,14 @@ static void main_handle_name(SpiceChannel *channel,
> SpiceMsgIn *in)
>  /* coroutine context */
>  static void main_handle_uuid(SpiceChannel *channel, SpiceMsgIn *in)
>  {
> +    SpiceMainChannel *c = SPICE_MAIN_CHANNEL(channel);
>      SpiceMsgMainUuid *uuid = spice_msg_in_parsed(in);
>      SpiceSession *session = spice_channel_get_session(channel);
>      gchar *uuid_str = spice_uuid_to_string(uuid->uuid);
>  
>      SPICE_DEBUG("server uuid: %s", uuid_str);
>      spice_session_set_uuid(session, uuid->uuid);
> +    c->priv->did_receive_uuid = TRUE;
>  
>      g_free(uuid_str);
>  }
> @@ -1519,11 +1522,18 @@ static gboolean _channel_new(channel_new_t *c)
>  /* coroutine context */
>  static void main_handle_channels_list(SpiceChannel *channel, SpiceMsgIn *in)
>  {
> +    SpiceMainChannel *main_channel = SPICE_MAIN_CHANNEL(channel);
>      SpiceMsgChannels *msg = spice_msg_in_parsed(in);
>      SpiceSession *session;
>      int i;
>  
>      session = spice_channel_get_session(channel);
> +
> +    /* guarantee that uuid is notified before setting up the channels, even
> if
> +     * the server is older and doesn't actually send the uuid */
> +    if (!main_channel->priv->did_receive_uuid)
> +        g_object_notify_main_context(G_OBJECT(session), "uuid");

You can notify unconditionnaly. ack otherwise

> +
>      for (i = 0; i < msg->num_of_channels; i++) {
>          channel_new_t *c;
>  
> --
> 1.8.3.1
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
> 


More information about the Spice-devel mailing list