From fd1f4c650f755aa9c21b358b4c7f56d41d15d140 Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira Date: Tue, 26 Jun 2012 17:09:14 +0300 Subject: [PATCH] compositor-drm: Remove destroy listeners when disabling planes When an unused plane is disabled, the destroy listener for a previously used buffer needs to be removed. This fixes a crash when an overlay would be reenabled using the same buffer as before, causing the destroy listener to be inserted twice. --- src/compositor-drm.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/compositor-drm.c b/src/compositor-drm.c index d969d52..6c182d7 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -520,8 +521,13 @@ drm_disable_unused_sprites(struct weston_output *output_base) weston_log("failed to disable plane: %d: %s\n", ret, strerror(errno)); drmModeRmFB(c->drm.fd, s->fb_id); - s->surface = NULL; - s->pending_surface = NULL; + + if (s->surface) { + s->surface = NULL; + wl_list_remove(&s->destroy_listener.link); + } + + assert(!s->pending_surface); s->fb_id = 0; s->pending_fb_id = 0; } -- 2.7.4