[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