-trying to fix #2198 -- or at least a related bug
authorChristian Grothoff <christian@grothoff.org>
Wed, 7 Mar 2012 20:40:06 +0000 (20:40 +0000)
committerChristian Grothoff <christian@grothoff.org>
Wed, 7 Mar 2012 20:40:06 +0000 (20:40 +0000)
src/util/connection.c

index 8224479f9b655c6b4d18960c4aa868316dcf8439..60e7f115f376d3fd1f8c2b65c65e28676b0ae085 100644 (file)
@@ -1388,6 +1388,7 @@ transmit_error (struct GNUNET_CONNECTION_Handle *sock)
     GNUNET_NETWORK_socket_shutdown (sock->sock, SHUT_RDWR);
     GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (sock->sock));
     sock->sock = NULL;
+    GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->write_task);
   }
   if (sock->read_task != GNUNET_SCHEDULER_NO_TASK)
   {
@@ -1464,6 +1465,7 @@ transmit_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
          _
          ("Could not satisfy pending transmission request, socket closed or connect failed (%p).\n"),
          sock);
+    GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->write_task);
     transmit_error (sock);
     return;                     /* connect failed for good, we're finished */
   }
@@ -1495,6 +1497,11 @@ RETRY:
     if (errno == EINTR)
       goto RETRY;
     LOG_STRERROR (GNUNET_ERROR_TYPE_DEBUG, "send");
+    if (GNUNET_SCHEDULER_NO_TASK != sock->write_task)
+    {
+      GNUNET_SCHEDULER_cancel (sock->write_task);
+      sock->write_task = GNUNET_SCHEDULER_NO_TASK;
+    }
     transmit_error (sock);
     return;
   }