compositor-wayland: Destroy shm buffers on output disable
Reviewed-by: Armin Krezović <krezovic.armin@gmail.com>
diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c
index ec5df90..775da25 100644
--- a/libweston/compositor-wayland.c
+++ b/libweston/compositor-wayland.c
@@ -629,6 +629,19 @@
wl_surface_destroy(output->parent.surface);
}
+static void
+wayland_output_destroy_shm_buffers(struct wayland_output *output)
+{
+ struct wayland_shm_buffer *buffer, *next;
+
+ /* Throw away any remaining SHM buffers */
+ wl_list_for_each_safe(buffer, next, &output->shm.free_buffers, free_link)
+ wayland_shm_buffer_destroy(buffer);
+ /* These will get thrown away when they get released */
+ wl_list_for_each(buffer, &output->shm.buffers, link)
+ buffer->output = NULL;
+}
+
static int
wayland_output_disable(struct weston_output *base)
{
@@ -645,6 +658,8 @@
wl_egl_window_destroy(output->gl.egl_window);
}
+ wayland_output_destroy_shm_buffers(output);
+
wayland_backend_destroy_output_surface(output);
if (output->frame)
@@ -719,7 +734,6 @@
{
struct wayland_backend *b =
to_wayland_backend(output->base.compositor);
- struct wayland_shm_buffer *buffer, *next;
int32_t ix, iy, iwidth, iheight;
int32_t width, height;
struct wl_region *region;
@@ -783,12 +797,7 @@
output->gl.border.bottom = NULL;
}
- /* Throw away any remaining SHM buffers */
- wl_list_for_each_safe(buffer, next, &output->shm.free_buffers, free_link)
- wayland_shm_buffer_destroy(buffer);
- /* These will get thrown away when they get released */
- wl_list_for_each(buffer, &output->shm.buffers, link)
- buffer->output = NULL;
+ wayland_output_destroy_shm_buffers(output);
}
static int