gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r9058 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r9058 - gnunet/src/util
Date: Thu, 1 Oct 2009 16:22:24 -0600

Author: grothoff
Date: 2009-10-01 16:22:24 -0600 (Thu, 01 Oct 2009)
New Revision: 9058

Modified:
   gnunet/src/util/connection.c
Log:
fixing timeout handling

Modified: gnunet/src/util/connection.c
===================================================================
--- gnunet/src/util/connection.c        2009-10-01 22:19:24 UTC (rev 9057)
+++ gnunet/src/util/connection.c        2009-10-01 22:22:24 UTC (rev 9058)
@@ -1027,9 +1027,9 @@
 
   sh->read_task = GNUNET_SCHEDULER_NO_TASK;
   now = GNUNET_TIME_absolute_get ();
-  if ((now.value > sh->receive_timeout.value) ||
-      (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT)) ||
-      (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)))
+  if ( (now.value > sh->receive_timeout.value) ||
+       (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT)) ||
+       (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) )
     {
 #if DEBUG_CONNECTION
       GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1304,17 +1304,29 @@
 transmit_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct GNUNET_CONNECTION_Handle *sock = cls;
+  GNUNET_CONNECTION_TransmitReadyNotify notify;
   ssize_t ret;
   size_t have;
 
   GNUNET_assert (sock->write_task != GNUNET_SCHEDULER_NO_TASK);
   sock->write_task = GNUNET_SCHEDULER_NO_TASK;
-  if ( (sock->sock == NULL) ||
-       ( (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT)) &&
-        (0 == (tc->reason & GNUNET_SCHEDULER_REASON_PREREQ_DONE)) &&
-        (!GNUNET_NETWORK_fdset_isset (tc->write_ready, sock->sock)))  )
+  GNUNET_assert (NULL != sock->sock);
+  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_TIMEOUT))
     {
 #if DEBUG_CONNECTION
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 
+                 "Transmit to `%s' fails, time out reached.\n",
+                 GNUNET_a2s (sock->addr, sock->addrlen));
+#endif
+      notify = sock->nth.notify_ready;
+      sock->nth.notify_ready = NULL;
+      notify (sock->nth.notify_ready_cls, 0, NULL);
+      return;
+    }
+  if (! GNUNET_NETWORK_fdset_isset (tc->write_ready, 
+                                   sock->sock))
+    {
+#if DEBUG_CONNECTION
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                   _("Could not satisfy pending transmission request, socket 
closed or connect failed.\n"));
 #endif
@@ -1392,7 +1404,8 @@
                                      GNUNET_SCHEDULER_PRIORITY_KEEP,
                                      GNUNET_SCHEDULER_NO_TASK,
                                      GNUNET_TIME_absolute_get_remaining 
(sock->nth.transmit_timeout),
-                                     sock->sock, &transmit_ready, sock);
+                                     sock->sock, 
+                                     &transmit_ready, sock);
 }
 
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]