From 0608ae2d4e8e69a7dbfa92f5e5313da8b7a6197b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 13 Apr 2017 13:03:12 +0800 Subject: [PATCH] monitor-config-store: Replace key when replacing config g_hash_table_insert() doesn't replace the key. This was a problem because the key was owned by the value inserted into the hash table, so when a value was removed, the key was freed, meaning that the key in the hash table was no pointing to freed memory. Fix this by using g_hash_table_replace() instead, which work the same except that it replaces the key with the one passed. This means that the key of a value in the hash table is always the key owned by the value. https://bugzilla.gnome.org/show_bug.cgi?id=777732 --- src/backends/meta-monitor-config-store.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backends/meta-monitor-config-store.c b/src/backends/meta-monitor-config-store.c index 7c4c624a5..aa7f08a5a 100644 --- a/src/backends/meta-monitor-config-store.c +++ b/src/backends/meta-monitor-config-store.c @@ -1185,8 +1185,8 @@ void meta_monitor_config_store_add (MetaMonitorConfigStore *config_store, MetaMonitorsConfig *config) { - g_hash_table_insert (config_store->configs, - config->key, g_object_ref (config)); + g_hash_table_replace (config_store->configs, + config->key, g_object_ref (config)); if (!config_store->custom_file) meta_monitor_config_store_save (config_store);