compositor: avoid scheduling rendering on shutdown

After the compositor exits the main loop in wl_display_run(), set the
compositor state to SLEEPING. This prevents scheduling repaints, that
will never be executed.

A repaint is scheduled by calling wl_event_loop_add_idle(), which
creates an idle event source. Normally the idle event source object is
destroyed after it has been executed. However, in the shutdown case we
never dispatch events again, and the object is leaked.

This leak is triggered by shell.c destructor, which destroys the
desktop-shell client. Destroying a client ends up calling
wlsc_compositor_schedule_repaint() while destroying the client
resources, especially surfaces.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
dev
Pekka Paalanen 13 years ago
parent 9cf5cc882d
commit 0135abee89
  1. 3
      compositor/compositor.c

@ -2174,6 +2174,9 @@ int main(int argc, char *argv[])
wl_display_run(display); wl_display_run(display);
/* prevent further rendering while shutting down */
ec->state = WLSC_COMPOSITOR_SLEEPING;
if (xserver) if (xserver)
wlsc_xserver_destroy(ec); wlsc_xserver_destroy(ec);

Loading…
Cancel
Save