[gnio] Fix error handling in g_socket_client_connect
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnio] Fix error handling in g_socket_client_connect
- Date: Fri, 15 May 2009 13:56:57 -0400 (EDT)
commit 661d5f1f2d808153059bfec7935a39fe26766cd5
Author: Alexander Larsson <alexl redhat com>
Date: Fri May 15 10:20:51 2009 +0200
Fix error handling in g_socket_client_connect
We want to report the error from last connect try if
the g_socket_address_enumerator_next call returns no
more adresses to try.
---
gio/gsocketclient.c | 31 ++++++++++++++++++++++---------
1 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/gio/gsocketclient.c b/gio/gsocketclient.c
index 3fefd90..4d1fabb 100644
--- a/gio/gsocketclient.c
+++ b/gio/gsocketclient.c
@@ -244,7 +244,9 @@ g_socket_client_connect (GSocketClient *client,
{
GSocketConnection *connection = NULL;
GSocketAddressEnumerator *enumerator;
+ GError *last_error, *tmp_error;
+ last_error = NULL;
enumerator = g_socket_connectable_enumerate (connectable);
while (connection == NULL)
{
@@ -258,22 +260,33 @@ g_socket_client_connect (GSocketClient *client,
break;
}
- address =
- g_socket_address_enumerator_next (enumerator, cancellable, error);
-
+ tmp_error = NULL;
+ address = g_socket_address_enumerator_next (enumerator, cancellable,
+ &tmp_error);
if (address == NULL)
- {
- g_assert (error == NULL || *error != NULL);
+ {
+ if (tmp_error)
+ {
+ g_clear_error (&last_error);
+ g_propagate_error (error, tmp_error);
+ }
+ else if (last_error)
+ {
+ g_propagate_error (error, tmp_error);
+ }
+ else
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ _("Unknown error on connect"));
break;
- }
+ }
/* clear error from previous attempt */
- g_clear_error (error);
+ g_clear_error (&last_error);
- socket = create_socket (client, address, error);
+ socket = create_socket (client, address, &last_error);
if (socket != NULL)
{
- if (g_socket_connect (socket, address, error))
+ if (g_socket_connect (socket, address, &last_error))
connection = g_socket_connection_factory_create_connection (socket);
g_object_unref (socket);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]