[Mesa-dev] [PATCH v2 8/8] egl/wayland: add dri2_wl_free_buffers() helper

Emil Velikov emil.l.velikov at gmail.com
Tue Oct 17 14:59:18 UTC 2017


On 17 October 2017 at 15:07, Eric Engestrom <eric.engestrom at imgtec.com> wrote:
> On Friday, 2017-10-06 21:38:35 +0000, Gwan-gyeong Mun wrote:
>> This deduplicates free routines of color_buffers array.
>>
>> Signed-off-by: Mun Gwan-gyeong <elongbug at gmail.com>
>> ---
>>  src/egl/drivers/dri2/platform_wayland.c | 60 +++++++++++++++++----------------
>>  1 file changed, 31 insertions(+), 29 deletions(-)
>>
>> diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
>> index 1518a24b7c..cfe474cf58 100644
>> --- a/src/egl/drivers/dri2/platform_wayland.c
>> +++ b/src/egl/drivers/dri2/platform_wayland.c
>> @@ -253,6 +253,35 @@ dri2_wl_create_pixmap_surface(_EGLDriver *drv, _EGLDisplay *disp,
>>     return NULL;
>>  }
>>
>> +static void
>> +dri2_wl_free_buffers(struct dri2_egl_surface *dri2_surf, bool check_lock)
>> +{
>> +   struct dri2_egl_display *dri2_dpy =
>> +      dri2_egl_display(dri2_surf->base.Resource.Display);
>> +
>> +   for (int i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) {
>> +      if (dri2_surf->color_buffers[i].native_buffer) {
>> +         if (check_lock && !dri2_surf->color_buffers[i].locked)
>> +            wl_buffer_destroy((struct wl_buffer *)dri2_surf->color_buffers[i].native_buffer);
>> +         else
>> +            wl_buffer_destroy((struct wl_buffer *)dri2_surf->color_buffers[i].native_buffer);
>
> Both branches have the same code, should be a hint :P
> I think this should be:
>
>    if (!check_lock || !dri2_surf->color_buffers[i].locked) {
>       wl_buffer_destroy((struct wl_buffer *)dri2_surf->color_buffers[i].native_buffer);
Drop the unneeded cast?

>       dri2_surf->color_buffers[i].native_buffer = NULL;
>    }
>
> without an `else`. You also want to remove the `native_buffer = NULL`
> from below, to avoid leaking locked buffers :)
>
I'm not sure if that's an actual leak. In either case, I'd leave that
as follow-up.

There are a few of instances where this can be used:
 - dri2_wl_destroy_surface, done
 - dri2_wl_release_buffers, done
 - update_buffers, todo
-  swrast_update_buffers, todo

Just an idea that came to mind, don't bother if you don't want to.
 - keep the platform specific buffer destroy (wl_buffer_destroy here)
in the platform code moving the rest as helper
 - plug the platform_android/platform_drm leak (?) by using the helper

Patches 5-7 look ok and are
Reviewed-by: Emil Velikov <emil.velikov at collabora.com>

Thanks
Emil


More information about the mesa-dev mailing list