compositor: don't schedule idle_repaint from calls to repaint
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Mon, 24 Oct 2011 13:30:14 +0000 (16:30 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Mon, 24 Oct 2011 19:32:16 +0000 (15:32 -0400)
wlsc_output_repaint may call wlsc_surface_damage indirectly through
wlsc_output_set_cursor. If this happens in the call made from repaint,
one ends up with repaint being called from both idle_repaint and
wlsc_output_finish_frame.

Fix this by setting output->repaint_scheduled to 1 before calling
wlsc_output_repaint in the function repaint.

[krh] Edited to just only clear repaint_scheduled, when we no longer have
a repaint scheduled.

Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
compositor/compositor.c

index c1765b4..17930cb 100644 (file)
@@ -997,10 +997,10 @@ wlsc_output_finish_frame(struct wlsc_output *output, int msecs)
                output->pending_scanout_buffer = NULL;
        }
 
-       output->repaint_scheduled = 0;
-
        if (output->repaint_needed)
                repaint(output, msecs);
+       else
+               output->repaint_scheduled = 0;
 }
 
 WL_EXPORT void