summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/performance_monitor.c
diff options
context:
space:
mode:
authorIlia Mirkin <imirkin@alum.mit.edu>2013-11-29 05:52:27 -0500
committerKenneth Graunke <kenneth@whitecape.org>2013-12-04 06:20:36 -0800
commit267679be84de5bc9d2bd0fccb1712bc5cddb6be7 (patch)
tree424c0749c5879f0e8fb79138abf10075e8fbdf89 /src/mesa/main/performance_monitor.c
parentc45cf6199fc493538cef33125c8a97a892e2ca83 (diff)
downloadexternal_mesa3d-267679be84de5bc9d2bd0fccb1712bc5cddb6be7.zip
external_mesa3d-267679be84de5bc9d2bd0fccb1712bc5cddb6be7.tar.gz
external_mesa3d-267679be84de5bc9d2bd0fccb1712bc5cddb6be7.tar.bz2
mesa: don't leak performance monitors on context destroy
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Cc: "10.0" <mesa-stable@lists.freedesktop.org>
Diffstat (limited to 'src/mesa/main/performance_monitor.c')
-rw-r--r--src/mesa/main/performance_monitor.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/mesa/main/performance_monitor.c b/src/mesa/main/performance_monitor.c
index 4981e6f..e62f770 100644
--- a/src/mesa/main/performance_monitor.c
+++ b/src/mesa/main/performance_monitor.c
@@ -93,6 +93,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)
{