On Wed, Jul 30, 2025 at 4:50 PM Alex Bradbury <[email protected]> wrote: > > g_list_free should be passed the head of the list. > > Signed-off-by: Alex Bradbury <[email protected]> > --- > contrib/plugins/hotblocks.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/contrib/plugins/hotblocks.c b/contrib/plugins/hotblocks.c > index 98404b6885..d3dd23ed9f 100644 > --- a/contrib/plugins/hotblocks.c > +++ b/contrib/plugins/hotblocks.c > @@ -73,15 +73,16 @@ static void exec_count_free(gpointer key, gpointer value, > gpointer user_data) > static void plugin_exit(qemu_plugin_id_t id, void *p) > { > g_autoptr(GString) report = g_string_new("collected "); > - GList *counts, *it; > + GList *counts, *sorted_counts, *it; > int i; > > g_string_append_printf(report, "%d entries in the hash table\n", > g_hash_table_size(hotblocks)); > counts = g_hash_table_get_values(hotblocks); > - it = g_list_sort_with_data(counts, cmp_exec_count, NULL); > + sorted_counts = g_list_sort_with_data(counts, cmp_exec_count, NULL); > > - if (it) { > + if (sorted_counts) { > + it = sorted_counts; > g_string_append_printf(report, "pc, tcount, icount, ecount\n"); > > for (i = 0; i < limit && it->next; i++, it = it->next) { > @@ -94,7 +95,7 @@ static void plugin_exit(qemu_plugin_id_t id, void *p) > qemu_plugin_scoreboard_u64(rec->exec_count))); > } > > - g_list_free(it); > + g_list_free(sorted_counts); > } > > qemu_plugin_outs(report->str); > -- > 2.50.1 > >
This looks correct to me. `g_hash_table_get_values` documentation says the returned value must be freed with `g_list_free`, but `g_list_sort_with_data` might change the list head, so neither `counts` nor `it` should be freed, but `sorted_counts` which is the new list head like the commit message says. Reviewed-by: Manos Pitsidianakis <[email protected]>
