[Spice-devel] [PATCH spice-gtk 2/4] main: send only pending monitor config changes
Jonathon Jongsma
jjongsma at redhat.com
Fri Apr 3 08:17:20 PDT 2015
This patch is both confusing and (I think) unwise.
first of all, as it is, the -1 will cause problems. If somebody calls
update_display_timer() while the timer id is -1, it will try to call
g_source_remove(-1). g_source_remove() expects a guint, so -1 will
presumably be coerced into an unsigned integer and then almost certainly
print a warning about in invalid source ID.
But if that is fixed, the -1 is still quite confusing. presumably you're
using it as a sort of signal that we tried to send a display update but
weren't able to? I'm really not a fan of using special magic numeric
values as a flag. It's much better to simply introduce a boolean flag to
be explicit about what you mean that trying to shoehorn that
functionality into a different variable.
But even if those things were fixed, I still don't think that this is
the right approach. I think that it's basically guaranteed to cause
regressions -- probably in scenarios that we don't test regularly and
won't catch until much later. I think that either we should leave the
behavior as-is, OR we should completely remove the
automatic-display-update-on-vdagent-connect from spice-gtk and leave it
to the application to handle.
On Thu, 2015-04-02 at 23:25 +0200, Marc-André Lureau wrote:
> When agent is ready, do not send current monitor configuration
> immediately unless there are pending changes.
> ---
> gtk/channel-main.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/gtk/channel-main.c b/gtk/channel-main.c
> index 3150208..c132ffa 100644
> --- a/gtk/channel-main.c
> +++ b/gtk/channel-main.c
> @@ -1290,8 +1290,11 @@ static gboolean timer_set_display(gpointer data)
> SpiceSession *session;
> gint i;
>
> - if (!c->agent_connected)
> + c->display_timer_id = 0;
> + if (!c->agent_connected) {
> + c->display_timer_id = -1;
> return FALSE;
> + }
>
> session = spice_channel_get_session(SPICE_CHANNEL(channel));
>
> @@ -1789,7 +1792,9 @@ static void main_agent_handle_msg(SpiceChannel *channel,
> }
> c->agent_caps_received = true;
> g_coroutine_signal_emit(self, signals[SPICE_MAIN_AGENT_UPDATE], 0);
> - update_display_timer(SPICE_MAIN_CHANNEL(channel), 0);
> +
> + if (c->display_timer_id)
> + update_display_timer(SPICE_MAIN_CHANNEL(channel), 0);
>
> if (caps->request)
> agent_announce_caps(self);
More information about the Spice-devel
mailing list