From 1afbd66971bb86b3f1a5922010680893e3c28ad5 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 5 Dec 2006 04:14:04 +0000 Subject: [PATCH] Really fix dispatch_signal() segfault by removing signal handlers that were supposed to be removed from the internal signal handler list git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@2170 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- src/nm-dbus-manager.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/nm-dbus-manager.c b/src/nm-dbus-manager.c index 33b83e9608..cf5a844ae4 100644 --- a/src/nm-dbus-manager.c +++ b/src/nm-dbus-manager.c @@ -1010,6 +1010,7 @@ nm_dbus_manager_remove_signal_handler (NMDBusManager *self, guint32 id) { GSList * elt; + GSList * found_elt = NULL; SignalHandlerData * sig_handler = NULL; g_return_if_fail (self != NULL); @@ -1020,15 +1021,20 @@ nm_dbus_manager_remove_signal_handler (NMDBusManager *self, if (handler && (handler->id == id)) { sig_handler = handler; + found_elt = elt; break; } } /* Not found */ - if (!sig_handler) + if (!sig_handler || !found_elt) return; + /* Remove and free the signal handler */ + self->priv->signal_handlers = g_slist_remove_link (self->priv->signal_handlers, + found_elt); free_signal_handler_data (sig_handler, self); + g_slist_free_1 (found_elt); } DBusConnection *