[PATCH v2] compositor: fix starvation of wl_buffer::release

Matt Hoosier matt.hoosier at gmail.com
Tue Sep 26 13:09:40 UTC 2017


This change replaces a queued emission of buffer-release events (which
is prone to starvation) with a regular event emission. This means that
client programs no longer need to secretly install surface frame
listeners just to guarantee that they get correctly notified of buffer
lifecycle events.

v2:

More information about the historical reasons why this change hadn't
happened yet, and the consensus to finally move ahead with it can be
found at the discussion terminating in this message:

https://lists.freedesktop.org/archives/wayland-devel/2017-September/035147.html

Signed-off-by: Matt Hoosier <matt.hoosier at gmail.com>
---
 clients/nested.c       | 3 +--
 libweston/compositor.c | 3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/clients/nested.c b/clients/nested.c
index e9070e9b..e2bdf684 100644
--- a/clients/nested.c
+++ b/clients/nested.c
@@ -228,8 +228,7 @@ nested_buffer_reference(struct nested_buffer_reference *ref,
 		ref->buffer->busy_count--;
 		if (ref->buffer->busy_count == 0) {
 			assert(wl_resource_get_client(ref->buffer->resource));
-			wl_resource_queue_event(ref->buffer->resource,
-						WL_BUFFER_RELEASE);
+			wl_buffer_send_release(ref->buffer->resource);
 		}
 		wl_list_remove(&ref->destroy_listener.link);
 	}
diff --git a/libweston/compositor.c b/libweston/compositor.c
index 813b6634..878cd535 100644
--- a/libweston/compositor.c
+++ b/libweston/compositor.c
@@ -1954,8 +1954,7 @@ weston_buffer_reference(struct weston_buffer_reference *ref,
 		ref->buffer->busy_count--;
 		if (ref->buffer->busy_count == 0) {
 			assert(wl_resource_get_client(ref->buffer->resource));
-			wl_resource_queue_event(ref->buffer->resource,
-						WL_BUFFER_RELEASE);
+			wl_buffer_send_release(ref->buffer->resource);
 		}
 		wl_list_remove(&ref->destroy_listener.link);
 	}
-- 
2.13.3



More information about the wayland-devel mailing list