Mesa (10.0): mesa: don't leak performance monitors on context destroy

Ian Romanick idr at kemper.freedesktop.org
Fri Dec 6 16:11:35 UTC 2013


Module: Mesa
Branch: 10.0
Commit: 6c00504a8aa2670623cc0b26d1b8448f5a75e467
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6c00504a8aa2670623cc0b26d1b8448f5a75e467

Author: Ilia Mirkin <imirkin at alum.mit.edu>
Date:   Fri Nov 29 05:52:27 2013 -0500

mesa: don't leak performance monitors on context destroy

Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Cc: "10.0" <mesa-stable at lists.freedesktop.org>
(cherry picked from commit 267679be84de5bc9d2bd0fccb1712bc5cddb6be7)

---

 src/mesa/main/context.c             |    1 +
 src/mesa/main/performance_monitor.c |   19 +++++++++++++++++++
 src/mesa/main/performance_monitor.h |    3 +++
 3 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 8cbc935..55d797b 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1194,6 +1194,7 @@ _mesa_free_context_data( struct gl_context *ctx )
    _mesa_free_sync_data(ctx);
    _mesa_free_varray_data(ctx);
    _mesa_free_transform_feedback(ctx);
+   _mesa_free_performance_monitors(ctx);
 
    _mesa_reference_buffer_object(ctx, &ctx->Pack.BufferObj, NULL);
    _mesa_reference_buffer_object(ctx, &ctx->Unpack.BufferObj, NULL);
diff --git a/src/mesa/main/performance_monitor.c b/src/mesa/main/performance_monitor.c
index 17cae51..3d9b4f8 100644
--- a/src/mesa/main/performance_monitor.c
+++ b/src/mesa/main/performance_monitor.c
@@ -89,6 +89,25 @@ fail:
    return NULL;
 }
 
+static void
+free_performance_monitor(GLuint key, void *data, void *user)
+{
+   struct gl_perf_monitor_object *m = data;
+   struct gl_context *ctx = user;
+
+   ralloc_free(m->ActiveGroups);
+   ralloc_free(m->ActiveCounters);
+   ctx->Driver.DeletePerfMonitor(ctx, m);
+}
+
+void
+_mesa_free_performance_monitors(struct gl_context *ctx)
+{
+   _mesa_HashDeleteAll(ctx->PerfMonitor.Monitors,
+                       free_performance_monitor, ctx);
+   _mesa_DeleteHashTable(ctx->PerfMonitor.Monitors);
+}
+
 static inline struct gl_perf_monitor_object *
 lookup_monitor(struct gl_context *ctx, GLuint id)
 {
diff --git a/src/mesa/main/performance_monitor.h b/src/mesa/main/performance_monitor.h
index a852a41..76234e5 100644
--- a/src/mesa/main/performance_monitor.h
+++ b/src/mesa/main/performance_monitor.h
@@ -35,6 +35,9 @@
 extern void
 _mesa_init_performance_monitors(struct gl_context *ctx);
 
+extern void
+_mesa_free_performance_monitors(struct gl_context *ctx);
+
 extern void GLAPIENTRY
 _mesa_GetPerfMonitorGroupsAMD(GLint *numGroups, GLsizei groupsSize,
                               GLuint *groups);




More information about the mesa-commit mailing list