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

Matt Hoosier matt.hoosier at gmail.com
Tue Sep 26 13:20:49 UTC 2017


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

On Tue, Sep 26, 2017 at 2:28 AM, Pekka Paalanen <ppaalanen at gmail.com> wrote:
> On Mon, 25 Sep 2017 10:31:35 -0500
> Matt Hoosier <matt.hoosier at gmail.com> wrote:
>
>> 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.
>>
>> 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);
>>       }
>
> Hi,
>
> this patch is exactly right, but I feel we should be more verbose on
> the reasoning behind this change. The old behaviour has been kept for a
> long time. Maybe a link to my email?
>
> That's the only thing I'd like to have before giving my Reviewed-by.
>
> Let's also wait for other comments before landing this.
>
>
> Thanks,
> pq


More information about the wayland-devel mailing list