Module: Mesa Branch: main Commit: 2fa1979c6688b92917e6242bab7e5c08ec8831b4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2fa1979c6688b92917e6242bab7e5c08ec8831b4
Author: Derek Foreman <derek.fore...@collabora.com> Date: Tue Dec 19 10:35:20 2023 -0600 egl/wayland: Fix possible buffer leak If we have to wait for a buffer to be released in swrast_update_buffers(), we can leak it. Take care to reuse the existing buffer if one is still available. Signed-off-by: Derek Foreman <derek.fore...@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26761> --- src/egl/drivers/dri2/platform_wayland.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index ec33aeebbab..5f1eb2e1cb0 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -2328,6 +2328,8 @@ dri2_wl_swrast_allocate_buffer(struct dri2_egl_surface *dri2_surf, int format, int fd, stride, size_map; void *data_map; + assert(!*buffer); + stride = dri2_wl_swrast_get_stride_for_format(format, w); size_map = h * stride; @@ -2403,6 +2405,9 @@ swrast_update_buffers(struct dri2_egl_surface *dri2_surf) for (int i = 0; i < ARRAY_SIZE(dri2_surf->color_buffers); i++) { if (!dri2_surf->color_buffers[i].locked) { dri2_surf->back = &dri2_surf->color_buffers[i]; + if (dri2_surf->back->wl_buffer) + break; + if (!dri2_wl_swrast_allocate_buffer( dri2_surf, dri2_surf->format, dri2_surf->base.Width, dri2_surf->base.Height, &dri2_surf->back->data,