[PATCH v2 weston 1/7] compositor: do not release if re-attaching buffer

Pekka Paalanen ppaalanen at gmail.com
Tue Dec 4 05:58:10 PST 2012


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 <ppaalanen at gmail.com>
---
 src/compositor.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index 565212d..88a37f7 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);
 	}
-- 
1.7.8.6



More information about the wayland-devel mailing list