From 6ffed086795aaa84ab35668bb59d712cdde34da3 Mon Sep 17 00:00:00 2001 From: Steven Toth Date: Mon, 24 Oct 2016 10:10:49 -0400 Subject: [PATCH] gallium/hud: fix a problem where objects are free'd while in use. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Instead of trying to maintain a reference counted list of valid HUD objects, and freeing them accordingly, creating race conditions between unanticipated multiple threads, simply accept they're allocated once and never released until the process terminates. They're a shared resource between multiple threads, so accept they're always available for use. Signed-off-by: Steven Toth Reviewed-by: Brian Paul Reviewed-by: Nicolai Hähnle --- src/gallium/auxiliary/hud/hud_cpufreq.c | 13 ------------- src/gallium/auxiliary/hud/hud_diskstat.c | 13 ------------- src/gallium/auxiliary/hud/hud_nic.c | 13 ------------- src/gallium/auxiliary/hud/hud_sensors_temp.c | 16 ---------------- 4 files changed, 55 deletions(-) diff --git a/src/gallium/auxiliary/hud/hud_cpufreq.c b/src/gallium/auxiliary/hud/hud_cpufreq.c index 4501bbbc38c..bfc748b47f9 100644 --- a/src/gallium/auxiliary/hud/hud_cpufreq.c +++ b/src/gallium/auxiliary/hud/hud_cpufreq.c @@ -112,14 +112,6 @@ query_cfi_load(struct hud_graph *gr) } } -static void -free_query_data(void *p) -{ - struct cpufreq_info *cfi = (struct cpufreq_info *)p; - list_del(&cfi->list); - FREE(cfi); -} - /** * Create and initialize a new object for a specific CPU. * \param pane parent context. @@ -162,11 +154,6 @@ hud_cpufreq_graph_install(struct hud_pane *pane, int cpu_index, gr->query_data = cfi; gr->query_new_value = query_cfi_load; - /* Don't use free() as our callback as that messes up Gallium's - * memory debugger. Use simple free_query_data() wrapper. - */ - gr->free_query_data = free_query_data; - hud_pane_add_graph(pane, gr); hud_pane_set_max_value(pane, 3000000 /* 3 GHz */); } diff --git a/src/gallium/auxiliary/hud/hud_diskstat.c b/src/gallium/auxiliary/hud/hud_diskstat.c index b248baf5d68..7d4f5001a3d 100644 --- a/src/gallium/auxiliary/hud/hud_diskstat.c +++ b/src/gallium/auxiliary/hud/hud_diskstat.c @@ -162,14 +162,6 @@ query_dsi_load(struct hud_graph *gr) } } -static void -free_query_data(void *p) -{ - struct diskstat_info *nic = (struct diskstat_info *) p; - list_del(&nic->list); - FREE(nic); -} - /** * Create and initialize a new object for a specific block I/O device. * \param pane parent context. @@ -208,11 +200,6 @@ hud_diskstat_graph_install(struct hud_pane *pane, const char *dev_name, gr->query_data = dsi; gr->query_new_value = query_dsi_load; - /* Don't use free() as our callback as that messes up Gallium's - * memory debugger. Use simple free_query_data() wrapper. - */ - gr->free_query_data = free_query_data; - hud_pane_add_graph(pane, gr); hud_pane_set_max_value(pane, 100); } diff --git a/src/gallium/auxiliary/hud/hud_nic.c b/src/gallium/auxiliary/hud/hud_nic.c index fb6b8c0524b..719dd04a581 100644 --- a/src/gallium/auxiliary/hud/hud_nic.c +++ b/src/gallium/auxiliary/hud/hud_nic.c @@ -234,14 +234,6 @@ query_nic_load(struct hud_graph *gr) } } -static void -free_query_data(void *p) -{ - struct nic_info *nic = (struct nic_info *) p; - list_del(&nic->list); - FREE(nic); -} - /** * Create and initialize a new object for a specific network interface dev. * \param pane parent context. @@ -284,11 +276,6 @@ hud_nic_graph_install(struct hud_pane *pane, const char *nic_name, gr->query_data = nic; gr->query_new_value = query_nic_load; - /* Don't use free() as our callback as that messes up Gallium's - * memory debugger. Use simple free_query_data() wrapper. - */ - gr->free_query_data = free_query_data; - hud_pane_add_graph(pane, gr); hud_pane_set_max_value(pane, 100); } diff --git a/src/gallium/auxiliary/hud/hud_sensors_temp.c b/src/gallium/auxiliary/hud/hud_sensors_temp.c index e41b8472624..4a8a4fc8c54 100644 --- a/src/gallium/auxiliary/hud/hud_sensors_temp.c +++ b/src/gallium/auxiliary/hud/hud_sensors_temp.c @@ -189,17 +189,6 @@ query_sti_load(struct hud_graph *gr) } } -static void -free_query_data(void *p) -{ - struct sensors_temp_info *sti = (struct sensors_temp_info *) p; - list_del(&sti->list); - if (sti->chip) - sensors_free_chip_name(sti->chip); - FREE(sti); - sensors_cleanup(); -} - /** * Create and initialize a new object for a specific sensor interface dev. * \param pane parent context. @@ -237,11 +226,6 @@ hud_sensors_temp_graph_install(struct hud_pane *pane, const char *dev_name, gr->query_data = sti; gr->query_new_value = query_sti_load; - /* Don't use free() as our callback as that messes up Gallium's - * memory debugger. Use simple free_query_data() wrapper. - */ - gr->free_query_data = free_query_data; - hud_pane_add_graph(pane, gr); switch (sti->mode) { case SENSORS_TEMP_CURRENT: -- 2.30.2