GSocketClient: plug two leaks
authorDan Winship <danw@gnome.org>
Sat, 14 Aug 2010 20:15:39 +0000 (16:15 -0400)
committerDan Winship <danw@gnome.org>
Sat, 14 Aug 2010 20:15:39 +0000 (16:15 -0400)
g_socket_client_connect_async() was always leaking its GCancellable,
and would also leak any GSocket that eventually failed to connect
after returning G_IO_ERROR_PENDING.

gio/gsocketclient.c

index 37b0b59..a4d4ea9 100644 (file)
@@ -751,6 +751,8 @@ g_socket_client_async_connect_complete (GSocketClientAsyncConnectData *data)
   g_simple_async_result_complete (data->result);
   g_object_unref (data->result);
   g_object_unref (data->enumerator);
+  if (data->cancellable)
+    g_object_unref (data->cancellable);
   g_slice_free (GSocketClientAsyncConnectData, data);
 }
 
@@ -790,6 +792,8 @@ g_socket_client_socket_callback (GSocket *socket,
       if (!g_socket_check_connect_result (data->current_socket, &error))
        {
          set_last_error (data, error);
+         g_object_unref (data->current_socket);
+         data->current_socket = NULL;
 
          /* try next one */
          g_socket_address_enumerator_next_async (data->enumerator,