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