compositor: fix starvation of wl_buffer::release
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@gmail.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
This commit is contained in:
parent
2a0c6c331e
commit
3052bc7e6d
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user