On 04/12/2016 12:53 PM, John Sheu wrote:
The XMesaVisual instances freed in the visuals table on display close
are being freed with a free() call, instead of XMesaDestroyVisual(),
causing a memory leak.

Signed-off-by: John Sheu <s...@google.com>
---
  src/mesa/drivers/x11/fakeglx.c | 2 +-
  src/mesa/drivers/x11/xm_api.c  | 1 +
  2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c
index 80b71765..2f4d9669 100644
--- a/src/mesa/drivers/x11/fakeglx.c
+++ b/src/mesa/drivers/x11/fakeglx.c
@@ -794,7 +794,7 @@ destroy_visuals_on_display(Display *dpy)
        if (VisualTable[i]->display == dpy) {
           /* remove this visual */
           int j;
-         free(VisualTable[i]);
+         XMesaDestroyVisual(VisualTable[i]);
           for (j = i; j < NumVisuals - 1; j++)
              VisualTable[j] = VisualTable[j + 1];
           NumVisuals--;
diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c
index 65e7ca89..82c4d188 100644
--- a/src/mesa/drivers/x11/xm_api.c
+++ b/src/mesa/drivers/x11/xm_api.c
@@ -856,6 +856,7 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display,
                                  accum_red_size, accum_green_size,
                                  accum_blue_size, accum_alpha_size,
                                  0)) {
+      free(v->visinfo);
        free(v);
        return NULL;
     }


Looks good. I did a quick tests w/ valgrind and there was one less leak with your patch.

Reviewed-by: Brian Paul <bri...@vmware.com>

I'll push this for you.  Thanks.


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to