GSocketClient: plug two leaks

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.
This commit is contained in:
Dan Winship 2010-08-14 16:15:39 -04:00
parent 16bafb4799
commit b76b24f1b3

View File

@ -751,6 +751,8 @@ g_socket_client_async_connect_complete (GSocketClientAsyncConnectData *data)
g_simple_async_result_complete (data->result); g_simple_async_result_complete (data->result);
g_object_unref (data->result); g_object_unref (data->result);
g_object_unref (data->enumerator); g_object_unref (data->enumerator);
if (data->cancellable)
g_object_unref (data->cancellable);
g_slice_free (GSocketClientAsyncConnectData, data); 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)) if (!g_socket_check_connect_result (data->current_socket, &error))
{ {
set_last_error (data, error); set_last_error (data, error);
g_object_unref (data->current_socket);
data->current_socket = NULL;
/* try next one */ /* try next one */
g_socket_address_enumerator_next_async (data->enumerator, g_socket_address_enumerator_next_async (data->enumerator,