From 060f010c35ae25bfca9a176b338d0562e3c62fac Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Tue, 18 Jun 2024 18:43:09 +0200 Subject: [PATCH] compositor: access correct weston_buffer union field according to type Stop writing weston_buffer::shm_buffer when weston_buffer::type is not WESTON_BUFFER_SHM. Instead, explicitly write to the union field that corresponds to the buffer type. Also add a comment why we clear the shm_buffer/dmabuf/legacy_buffer pointer here. Signed-off-by: Philipp Zabel --- libweston/compositor.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libweston/compositor.c b/libweston/compositor.c index 01138a72d..15b707b7f 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -2761,7 +2761,21 @@ weston_buffer_destroy_handler(struct wl_listener *listener, void *data) container_of(listener, struct weston_buffer, destroy_listener); buffer->resource = NULL; - buffer->shm_buffer = NULL; + /* wayland-server will destroy the SHM/dmabuf/legacy wl_buffer after we + * return. */ + switch (buffer->type) { + case WESTON_BUFFER_SHM: + buffer->shm_buffer = NULL; + break; + case WESTON_BUFFER_DMABUF: + buffer->dmabuf = NULL; + break; + case WESTON_BUFFER_SOLID: + break; + case WESTON_BUFFER_RENDERER_OPAQUE: + buffer->legacy_buffer = NULL; + break; + } if (buffer->busy_count + buffer->passive_count > 0) return;