From cc60267c8ddfcc6681106193294da2d8221160cf Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Tue, 22 Oct 2013 17:44:04 -0700 Subject: [PATCH] Free all fip-allocated data when the program exits This isn't strictly necessary since the operating system is about to reclaim all of this data anyway. The only real advantage of doing this is that it enables us to see in a valgrind report that there aren't any memory leaks due to direct allocation by code within fips. --- metrics.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/metrics.c b/metrics.c index 38e9e95..5c5cd1b 100644 --- a/metrics.c +++ b/metrics.c @@ -77,6 +77,8 @@ typedef struct metrics_group_info typedef struct metrics_info { + int initialized; + unsigned num_groups; metrics_group_info_t *groups; } metrics_info_t; @@ -167,6 +169,24 @@ metrics_group_info_init (metrics_group_info_t *group, GLuint id) } } +static void +metrics_group_info_fini (metrics_group_info_t *group) +{ + unsigned i; + + for (i = 0; i < group->num_counters; i++) + free (group->counter_names[i]); + + free (group->counter_types); + free (group->counter_names); + free (group->counters); + + free (group->name); +} + +static void +metrics_info_fini (metrics_info_t *info); + void metrics_info_init (void) { @@ -174,6 +194,9 @@ metrics_info_init (void) GLuint *group_ids; metrics_info_t *metrics_info = ¤t_context.metrics_info; + if (metrics_info->initialized) + metrics_info_fini (metrics_info); + glGetPerfMonitorGroupsAMD ((int *) &metrics_info->num_groups, 0, NULL); group_ids = xmalloc (metrics_info->num_groups * sizeof (GLuint)); @@ -186,6 +209,19 @@ metrics_info_init (void) metrics_group_info_init (&metrics_info->groups[i], i); free (group_ids); + + metrics_info->initialized = 1; +} + +static void +metrics_info_fini (metrics_info_t *info) +{ + unsigned i; + + for (i = 0; i < info->num_groups; i++) + metrics_group_info_fini (&info->groups[i]); + + free (info->groups); } static const char * @@ -499,6 +535,8 @@ metrics_exit (void) { if (verbose) printf ("fips: terminating\n"); + + metrics_info_fini (¤t_context.metrics_info); } -- 2.43.0