From 58e5ef6d095284050a9e0f9d79ac8008c2fab714 Mon Sep 17 00:00:00 2001 From: "Nathan S. Evans" Date: Mon, 31 Jan 2011 11:22:23 +0000 Subject: Fix for unixpath/arm bug --- src/util/client.c | 39 ++++++++++++++++++++++++++++++++++----- src/util/connection.c | 12 +++++++++--- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/util/client.c b/src/util/client.c index 257a69b5a..a097086d3 100644 --- a/src/util/client.c +++ b/src/util/client.c @@ -43,6 +43,8 @@ */ #define MAX_ATTEMPTS 50 +#define UNIXPATH_RETRIES 0 + /** * Handle for a transmission request. @@ -271,7 +273,9 @@ do_connect (const char *service_name, char *hostname; char *unixpath; unsigned long long port; + unsigned int count; + sock = NULL; #if AF_UNIX if (0 == (attempt % 2)) { @@ -280,13 +284,28 @@ do_connect (const char *service_name, GNUNET_CONFIGURATION_get_value_string (cfg, service_name, "UNIXPATH", &unixpath)) && - (0 < strlen (unixpath))) + (0 < strlen (unixpath))) /* We have a non-NULL unixpath, does that mean it's valid? */ { - sock = GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, - unixpath); + count = 0; + sock = GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, unixpath); + while ((NULL == sock) && (count < UNIXPATH_RETRIES)) + { +#if DEBUG_CLIENT + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Failed to connect to unixpath `%s', retrying!\n", unixpath); +#endif + count++; + sleep(1); + sock = GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, unixpath); + } + GNUNET_free (unixpath); if (sock != NULL) - return sock; + { +#if DEBUG_CLIENT + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Connected to unixpath `%s'!\n", unixpath); +#endif + return sock; + } } } #endif @@ -332,12 +351,16 @@ do_connect (const char *service_name, unixpath); GNUNET_free (unixpath); if (sock != NULL) - return sock; + { + return sock; + } } } #endif + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Port is 0 for service `%s', unixpath didn't work, returning NULL(!)!\n", service_name); return NULL; } + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Creating from connect!\n"); sock = GNUNET_CONNECTION_create_from_connect (cfg, hostname, port); @@ -480,6 +503,9 @@ receive_helper (void *cls, if ((available == 0) || (conn->sock == NULL) || (errCode != 0)) { /* signal timeout! */ +#if DEBUG_CLIENT + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "timeout in receive_helper, available %d, conn->sock %s, errCode %d\n", available, conn->sock == NULL ? "NULL" : "non-NULL", errCode); +#endif if (NULL != (receive_handler = conn->receiver_handler)) { receive_handler_cls = conn->receiver_handler_cls; @@ -586,6 +612,9 @@ GNUNET_CLIENT_receive (struct GNUNET_CLIENT_Connection *sock, { GNUNET_assert (sock->in_receive == GNUNET_NO); sock->in_receive = GNUNET_YES; +#if DEBUG_CLIENT + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "calling GNUNET_CONNECTION_receive\n"); +#endif GNUNET_CONNECTION_receive (sock->sock, GNUNET_SERVER_MAX_MESSAGE_SIZE - 1, timeout, &receive_helper, sock); diff --git a/src/util/connection.c b/src/util/connection.c index b0504ddd8..095fddb45 100644 --- a/src/util/connection.c +++ b/src/util/connection.c @@ -41,6 +41,8 @@ #define DEBUG_CONNECTION GNUNET_NO +#define HARD_FAIL GNUNET_NO + /** * Possible functions to call after connect failed or succeeded. @@ -965,14 +967,16 @@ GNUNET_CONNECTION_create_from_connect_to_unixpath (const struct ret->addr, ret->addrlen)) { - /* Just return; we expect everything to work eventually so don't fail HARD */ - return ret; #if HARD_FAIL GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (ret->sock)); GNUNET_free (ret->addr); GNUNET_free (ret->write_buffer); GNUNET_free (ret); return NULL; +#else /* Just return; we expect everything to work eventually so don't fail HARD */ + GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (ret->sock)); + ret->sock = NULL; + return ret; #endif } connect_success_continuation (ret); @@ -1415,7 +1419,9 @@ connect_error (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { struct GNUNET_CONNECTION_Handle *sock = cls; GNUNET_CONNECTION_TransmitReadyNotify notify; - + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Transmission request of size %u fails, connection failed (%p).\n", + sock->nth.notify_size, sock); #if DEBUG_CONNECTION GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission request of size %u fails, connection failed (%p).\n", -- cgit v1.2.3