From 9e356dab83591286ff0e69f238dfb385c3622a76 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 20 Oct 2009 11:36:47 -0700 Subject: [PATCH] libnm-glib: fix warning tearing down connections GLib-CRITICAL **: g_hash_table_iter_next: assertion `ri->version == ri->hash_table->version' failed --- libnm-glib/nm-remote-settings.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libnm-glib/nm-remote-settings.c b/libnm-glib/nm-remote-settings.c index d7be8fbb04..55ae0f3a14 100644 --- a/libnm-glib/nm-remote-settings.c +++ b/libnm-glib/nm-remote-settings.c @@ -268,10 +268,20 @@ remove_connections (gpointer user_data) NMRemoteSettingsPrivate *priv = NM_REMOTE_SETTINGS_GET_PRIVATE (self); GHashTableIter iter; gpointer value; + GSList *list = NULL, *list_iter; + /* Build up the list of connections; we can't emit "removed" during hash + * table iteration because emission of the "removed" signal may trigger code + * that explicitly removes the the connection from the hash table somewhere + * else. + */ g_hash_table_iter_init (&iter, priv->connections); while (g_hash_table_iter_next (&iter, NULL, &value)) - g_signal_emit_by_name (NM_REMOTE_CONNECTION (value), "removed"); + list = g_slist_prepend (list, NM_REMOTE_CONNECTION (value)); + + for (list_iter = list; list_iter; list_iter = g_slist_next (list_iter)) + g_signal_emit_by_name (NM_REMOTE_CONNECTION (list_iter->data), "removed"); + g_slist_free (list); g_hash_table_remove_all (priv->connections); return FALSE;