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>
This commit is contained in:
@@ -2174,6 +2174,9 @@ int main(int argc, char *argv[])
|
||||
|
||||
wl_display_run(display);
|
||||
|
||||
/* prevent further rendering while shutting down */
|
||||
ec->state = WLSC_COMPOSITOR_SLEEPING;
|
||||
|
||||
if (xserver)
|
||||
wlsc_xserver_destroy(ec);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user