From c4114f7d7b6baa193ba4fbeb8693becfcd256943 Mon Sep 17 00:00:00 2001 From: Klaus Ethgen Date: Mon, 15 Feb 2016 22:09:52 +0100 Subject: [PATCH] Fix nasty double free crashes Old GTK+ versions seemed to be robust about this double free so we seen that crashes or 100% CPU usages just with modern versions. This patch takes care of it on two places: 1. Hashes will not be freed by g_hash_table_destroy when empty 2. NULLify the enty variable after free --- src/collect-io.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/collect-io.c b/src/collect-io.c index 1f6cf050..bb9967d4 100644 --- a/src/collect-io.c +++ b/src/collect-io.c @@ -497,8 +497,14 @@ static void collect_manager_entry_free_data(CollectManagerEntry *entry) collect_manager_action_unref(action); } g_list_free(entry->add_list); - g_hash_table_destroy(entry->oldpath_hash); - g_hash_table_destroy(entry->newpath_hash); + if (g_hash_table_size(entry->oldpath_hash) > 0) + g_hash_table_destroy(entry->oldpath_hash); + else + g_hash_table_unref(entry->oldpath_hash); + if (g_hash_table_size(entry->newpath_hash) > 0) + g_hash_table_destroy(entry->newpath_hash); + else + g_hash_table_unref(entry->newpath_hash); } static void collect_manager_entry_init_data(CollectManagerEntry *entry) @@ -704,6 +710,8 @@ static void collect_manager_refresh(void) else { collect_manager_entry_free(entry); + + entry = NULL; } } } -- 2.20.1