gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r16696 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r16696 - gnunet/src/transport
Date: Sat, 3 Sep 2011 11:28:25 +0200

Author: grothoff
Date: 2011-09-03 11:28:25 +0200 (Sat, 03 Sep 2011)
New Revision: 16696

Modified:
   gnunet/src/transport/gnunet-service-transport.c
Log:
LRN: 
A bit less dirty transport crash fix

Basically, it now also frees mq before returning. The logic is kinda
complex for such a small thing, but it's either that, or having two
GNUNET_free (mq) statements.
Although maybe you can postpone freeing mq until the end of the
function (see v2 patch).

[this is the v2 patch]


Modified: gnunet/src/transport/gnunet-service-transport.c
===================================================================
--- gnunet/src/transport/gnunet-service-transport.c     2011-09-02 20:03:13 UTC 
(rev 16695)
+++ gnunet/src/transport/gnunet-service-transport.c     2011-09-03 09:28:25 UTC 
(rev 16696)
@@ -1613,22 +1613,21 @@
       mq->specific_address->in_transmit = GNUNET_NO;
   }
   n = find_neighbour (&mq->neighbour_id);
-  if (n == NULL)
+  if (n != NULL)
   {
+    if (mq->client != NULL)
+      transmit_send_ok (mq->client, n, target, result);
+    GNUNET_CONTAINER_DLL_remove (n->cont_head, n->cont_tail, mq);
+    if (result == GNUNET_OK)
+      try_transmission_to_peer (n);
+    else if (GNUNET_SCHEDULER_NO_TASK == n->retry_task)
+      n->retry_task = GNUNET_SCHEDULER_add_now (&retry_transmission_task, n);
+  }
+  else
     GNUNET_log_from (GNUNET_ERROR_TYPE_WARNING, "transmit_send_continuation",
                      "Neighbour `%s' no longer exists\n",
                      GNUNET_i2s (&mq->neighbour_id));
-    return;
-  }
-  if (mq->client != NULL)
-    transmit_send_ok (mq->client, n, target, result);
-  GNUNET_assert (n != NULL);
-  GNUNET_CONTAINER_DLL_remove (n->cont_head, n->cont_tail, mq);
   GNUNET_free (mq);
-  if (result == GNUNET_OK)
-    try_transmission_to_peer (n);
-  else if (GNUNET_SCHEDULER_NO_TASK == n->retry_task)
-    n->retry_task = GNUNET_SCHEDULER_add_now (&retry_transmission_task, n);
 }
 
 




reply via email to

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