[glib] g_socket_client_connect_async: fix when g_socket_connect succeeds immediately



commit bc29aa9b0956dec53c0b957ce879b41329307058
Author: Dan Winship <danw gnome org>
Date:   Fri Sep 10 09:12:17 2010 -0400

    g_socket_client_connect_async: fix when g_socket_connect succeeds immediately
    
    https://bugzilla.gnome.org/show_bug.cgi?id=629251

 gio/gsocketclient.c |   31 ++++++++++++++++++-------------
 1 files changed, 18 insertions(+), 13 deletions(-)
---
diff --git a/gio/gsocketclient.c b/gio/gsocketclient.c
index 85496fc..dd2c0d3 100644
--- a/gio/gsocketclient.c
+++ b/gio/gsocketclient.c
@@ -1068,6 +1068,22 @@ g_socket_client_proxy_connect (GSocketClientAsyncConnectData *data)
     }
 }
 
+static void
+g_socket_client_socket_connected (GSocketClientAsyncConnectData *data)
+{
+  g_socket_set_blocking (data->current_socket, TRUE);
+
+  data->connection =
+    g_socket_connection_factory_create_connection (data->current_socket);
+  g_object_unref (data->current_socket);
+  data->current_socket = NULL;
+
+  if (data->proxy_addr)
+    g_socket_client_proxy_connect (data);
+  else
+    g_socket_client_async_connect_complete (data);
+}
+
 static gboolean
 g_socket_client_socket_callback (GSocket *socket,
 				 GIOCondition condition,
@@ -1103,18 +1119,7 @@ g_socket_client_socket_callback (GSocket *socket,
 	}
     }
 
-  g_socket_set_blocking (data->current_socket, TRUE);
-
-  data->connection =
-    g_socket_connection_factory_create_connection (data->current_socket);
-  g_object_unref (data->current_socket);
-  data->current_socket = NULL;
-
-  if (data->proxy_addr)
-    g_socket_client_proxy_connect (data);
-  else
-    g_socket_client_async_connect_complete (data);
-
+  g_socket_client_socket_connected (data);
   return FALSE;
 }
 
@@ -1164,7 +1169,7 @@ g_socket_client_enumerator_callback (GObject      *object,
       if (g_socket_connect (socket, address, data->cancellable, &tmp_error))
 	{
 	  data->current_socket = socket;
-	  g_socket_client_async_connect_complete (data);
+	  g_socket_client_socket_connected (data);
 
 	  g_object_unref (address);
 	  return;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]