Hi Pavel, The previous approach is better, since it waits until the monitor config is received. Just waiting for channels to be connected would be racy. ----- Original Message ----- > Fixes: > https://bugs.freedesktop.org/show_bug.cgi?id=90914 > --- > src/channel-main.c | 2 +- > src/spice-session-priv.h | 1 + > src/spice-session.c | 25 +++++++++++++++++++++++++ > 3 files changed, 27 insertions(+), 1 deletion(-) > > diff --git a/src/channel-main.c b/src/channel-main.c > index fbc41da..6344d0c 100644 > --- a/src/channel-main.c > +++ b/src/channel-main.c > @@ -1425,7 +1425,7 @@ static gboolean timer_set_display(gpointer data) > > /* ensure we have an explicit monitor configuration at least for > number of display channels */ > - for (i = 0; i < spice_session_get_n_display_channels(session); i++) > + for (i = 0; i < spice_session_get_n_connected_display_channels(session); > i++) > if (!c->display[i].enabled_set) { > SPICE_DEBUG("Not sending monitors config, missing monitors"); > return FALSE; > diff --git a/src/spice-session-priv.h b/src/spice-session-priv.h > index 049973a..203bbc0 100644 > --- a/src/spice-session-priv.h > +++ b/src/spice-session-priv.h > @@ -96,6 +96,7 @@ const guint8* spice_session_get_webdav_magic(SpiceSession > *session); > PhodavServer *spice_session_get_webdav_server(SpiceSession *session); > PhodavServer* channel_webdav_server_new(SpiceSession *session); > guint spice_session_get_n_display_channels(SpiceSession *session); > +guint spice_session_get_n_connected_display_channels(SpiceSession *session); > void spice_session_set_main_channel(SpiceSession *session, SpiceChannel > *channel); > gboolean spice_session_set_migration_session(SpiceSession *session, > SpiceSession *mig_session); > SpiceAudio *spice_audio_get(SpiceSession *session, GMainContext *context); > diff --git a/src/spice-session.c b/src/spice-session.c > index 778d82a..5154bcc 100644 > --- a/src/spice-session.c > +++ b/src/spice-session.c > @@ -2452,6 +2452,31 @@ guint > spice_session_get_n_display_channels(SpiceSession *session) > } > > G_GNUC_INTERNAL > +guint spice_session_get_n_connected_display_channels(SpiceSession *session) > +{ > + SpiceSessionPrivate *s; > + struct channel *item; > + RingItem *ring; > + guint channels = 0; > + > + g_return_val_if_fail(SPICE_IS_SESSION(session), 0); > + g_return_val_if_fail(session->priv != NULL, 0); > + > + s = session->priv; > + > + for (ring = ring_get_head(&s->channels); > + ring != NULL; > + ring = ring_next(&s->channels, ring)) { > + item = SPICE_CONTAINEROF(ring, struct channel, link); > + if (SPICE_IS_DISPLAY_CHANNEL(item->channel) && > + spice_channel_get_state(item->channel) != > SPICE_CHANNEL_STATE_UNCONNECTED) { > + channels++; > + } > + } > + return channels; > +} > + > +G_GNUC_INTERNAL > void spice_session_set_uuid(SpiceSession *session, guint8 uuid[16]) > { > g_return_if_fail(SPICE_IS_SESSION(session)); > -- > 2.4.3 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel > _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel