From cb320cb5feb78a5a06651d3223914d9099a6f212 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 21 Aug 2014 19:00:13 +0100 Subject: [PATCH] gsocketclient: Handle cancellation between CONNECTING and CONNECTED MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If a g_socket_client_connect_async() operation is cancelled between the CONNECTING and CONNECTED events (i.e. while in the g_socket_connection_connect_async() call), the code in g_socket_client_connected_callback() would previously unconditionally loop round and try the next socket address from the address enumerator (by calling enumerator_next_async()). This would correctly handle the cancellation and return from the overall task — but not before emitting a spurious RESOLVING event. Avoid emitting the spurious RESOLVING event by explicitly handling cancellation at the beginning of g_socket_client_connected_callback(). https://bugzilla.gnome.org/show_bug.cgi?id=735179 --- gio/gsocketclient.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gio/gsocketclient.c b/gio/gsocketclient.c index 382b6b6d9..2cd98932f 100644 --- a/gio/gsocketclient.c +++ b/gio/gsocketclient.c @@ -1492,6 +1492,12 @@ g_socket_client_connected_callback (GObject *source, GProxy *proxy; const gchar *protocol; + if (g_task_return_error_if_cancelled (data->task)) + { + g_object_unref (data->task); + return; + } + if (!g_socket_connection_connect_finish (G_SOCKET_CONNECTION (source), result, &error)) {