Mesa (mesa_7_7_branch): st/dri: fix optionCache memory leaks

Brian Paul brianp at kemper.freedesktop.org
Mon Jan 18 17:48:44 UTC 2010


Module: Mesa
Branch: mesa_7_7_branch
Commit: e978b24c87be6d7572ed3272e6b186d5c54fb414
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e978b24c87be6d7572ed3272e6b186d5c54fb414

Author: Marcin Slusarz <marcin.slusarz at gmail.com>
Date:   Mon Jan 18 10:48:06 2010 -0700

st/dri: fix optionCache memory leaks

Signed-off-by: Brian Paul <brianp at vmware.com>

---

 src/gallium/state_trackers/dri/dri_context.c |    6 ++++++
 src/gallium/state_trackers/dri/dri_screen.c  |   10 ++++++++++
 2 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/src/gallium/state_trackers/dri/dri_context.c b/src/gallium/state_trackers/dri/dri_context.c
index 8819936..cd9d8b6 100644
--- a/src/gallium/state_trackers/dri/dri_context.c
+++ b/src/gallium/state_trackers/dri/dri_context.c
@@ -101,6 +101,12 @@ dri_destroy_context(__DRIcontextPrivate * cPriv)
 {
    struct dri_context *ctx = dri_context(cPriv);
 
+   /* note: we are freeing values and nothing more because
+    * driParseConfigFiles allocated values only - the rest
+    * is owned by screen optionCache.
+    */
+   FREE(ctx->optionCache.values);
+
    /* No particular reason to wait for command completion before
     * destroying a context, but it is probably worthwhile flushing it
     * to avoid having to add code elsewhere to cope with flushing a
diff --git a/src/gallium/state_trackers/dri/dri_screen.c b/src/gallium/state_trackers/dri/dri_screen.c
index 11ea28b..d95c627 100644
--- a/src/gallium/state_trackers/dri/dri_screen.c
+++ b/src/gallium/state_trackers/dri/dri_screen.c
@@ -327,8 +327,18 @@ static void
 dri_destroy_screen(__DRIscreenPrivate * sPriv)
 {
    struct dri_screen *screen = dri_screen(sPriv);
+   int i;
 
    screen->pipe_screen->destroy(screen->pipe_screen);
+   
+   for (i = 0; i < (1 << screen->optionCache.tableSize); ++i) {
+      FREE(screen->optionCache.info[i].name);
+      FREE(screen->optionCache.info[i].ranges);
+   }
+
+   FREE(screen->optionCache.info);
+   FREE(screen->optionCache.values);
+
    FREE(screen);
    sPriv->private = NULL;
 }




More information about the mesa-commit mailing list