From 152a9b6abbe435153e09f66ad31b8eab368494c6 Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Tue, 13 Oct 2020 09:24:02 -0400 Subject: [PATCH] gsignal: Plug g_signal_connect_object leak commit 916297be799ee001b4a214cc52c3b960bb0b5deb added a hash table to provide constant time lookups of signal handlers. Unfortunately, that commit neglected to remove handlers from g_signal_connect_object calls from the hash table that are disconnected implicitly when the associated object goes away. This commit addresses that bug by changing the closure invalidate handler associated with the signal connection to properly remove the handler from the hash table. --- gobject/gsignal.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gobject/gsignal.c b/gobject/gsignal.c index ebf5b3c1c..41599eb0d 100644 --- a/gobject/gsignal.c +++ b/gobject/gsignal.c @@ -3916,6 +3916,7 @@ invalid_closure_notify (gpointer instance, g_assert (handler != NULL); g_assert (handler->closure == closure); + g_hash_table_remove (g_handlers, handler); handler->sequential_number = 0; handler->block_count = 1; handler_unref_R (signal_id, instance, handler);