From a6421c4ea8db9e2aa54ae195739c06a9a45df78d Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Tue, 4 Dec 2012 15:58:10 +0200 Subject: [PATCH] compositor: do not release if re-attaching buffer If a client called wl_surface.attach with the same wl_buffer as previously, the compositor would mistakenly send a release on that buffer. This will cause problems only when clients start to properly use the wl_buffer.release event. Do not send wl_buffer.release if the same buffer is attached again. Signed-off-by: Pekka Paalanen --- src/compositor.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/compositor.c b/src/compositor.c index 565212d6..88a37f7a 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -912,16 +912,18 @@ weston_surface_destroy(struct weston_surface *surface) static void weston_surface_attach(struct weston_surface *surface, struct wl_buffer *buffer) { - if (surface->buffer) { + if (surface->buffer && buffer != surface->buffer) { weston_buffer_post_release(surface->buffer); wl_list_remove(&surface->buffer_destroy_listener.link); } - if (buffer) { + if (buffer && buffer != surface->buffer) { buffer->busy_count++; wl_signal_add(&buffer->resource.destroy_signal, &surface->buffer_destroy_listener); - } else { + } + + if (!buffer) { if (weston_surface_is_mapped(surface)) weston_surface_unmap(surface); }