Fix infloop when multiple clients are disconnected after another.
This commit is contained in:
@ -280,16 +280,21 @@ server_name_vanished_callback (GDBusConnection *connection,
|
|||||||
g_hash_table_iter_remove (&iter);
|
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 =
|
const gchar *client_connection =
|
||||||
server_context_get_client_connection (head->data);
|
server_context_get_client_connection (head->data);
|
||||||
|
GSList *next = g_slist_next (head);
|
||||||
|
|
||||||
if (g_strcmp0 (client_connection, name) == 0) {
|
if (g_strcmp0 (client_connection, name) == 0) {
|
||||||
server->context_stack = g_slist_remove_link (server->context_stack,
|
server->context_stack = g_slist_remove_link (server->context_stack,
|
||||||
head);
|
head);
|
||||||
g_object_unref (head->data);
|
g_object_unref (head->data);
|
||||||
g_slist_free1 (head);
|
g_slist_free1 (head);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
head = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (server->context_stack)
|
if (server->context_stack)
|
||||||
server_context_set_enabled (server->context_stack->data, TRUE);
|
server_context_set_enabled (server->context_stack->data, TRUE);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user