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,

Reply via email to