From fbcf6b6c65d94c947f571b86017f5db37323c8ed Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Thu, 3 Mar 2011 16:55:58 +0900 Subject: [PATCH] Fix infloop when multiple clients are disconnected after another. --- src/server-server.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server-server.c b/src/server-server.c index f7c52635..69bad082 100644 --- a/src/server-server.c +++ b/src/server-server.c @@ -280,16 +280,21 @@ server_name_vanished_callback (GDBusConnection *connection, g_hash_table_iter_remove (&iter); } - for (head = server->context_stack; head; head = server->context_stack) { + for (head = server->context_stack; head; ) { const gchar *client_connection = server_context_get_client_connection (head->data); + GSList *next = g_slist_next (head); + if (g_strcmp0 (client_connection, name) == 0) { server->context_stack = g_slist_remove_link (server->context_stack, head); g_object_unref (head->data); g_slist_free1 (head); } + + head = next; } + if (server->context_stack) server_context_set_enabled (server->context_stack->data, TRUE); }