- doc
[oweals/gnunet.git] / src / mesh / gnunet-service-mesh.c
index 9e60b38d9a099d9ac08f463865c251d4de09d62f..7ebe7d199d188696f36268b002a872fa3a1b1ae1 100644 (file)
@@ -3599,6 +3599,7 @@ tunnel_get_children_fwd_ack (struct MeshTunnel *t)
   ctx.t = t;
   ctx.max_child_ack = 0;
   ctx.nchildren = 0;
+  ctx.init = GNUNET_NO;
   tree_iterate_children (t->tree, tunnel_get_child_fwd_ack, &ctx);
 
   if (0 == ctx.nchildren)
@@ -4451,6 +4452,7 @@ send_core_path_create (void *cls, size_t size, void *buf)
   if (GNUNET_YES == t->nobuffer)
     opt |= MESH_TUNNEL_OPT_NOBUFFER;
   msg->opt = htonl(opt);
+  msg->reserved = 0;
 
   peer_ptr = (struct GNUNET_PeerIdentity *) &msg[1];
   for (i = 0; i < p->length; i++)
@@ -4583,10 +4585,12 @@ queue_destroy (struct MeshPeerQueue *queue, int clear_cls)
     {
       case GNUNET_MESSAGE_TYPE_MESH_TUNNEL_DESTROY:
         GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "   cancelling TUNNEL_DESTROY\n");
+        /* fall through */
       case GNUNET_MESSAGE_TYPE_MESH_UNICAST:
       case GNUNET_MESSAGE_TYPE_MESH_MULTICAST:
       case GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN:
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "   type payload\n");
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                    "   type prebuilt (payload, tunnel destroy)\n");
         dd = queue->cls;
         data_descriptor_decrement_rc (dd->mesh_data);
         break;
@@ -4622,13 +4626,15 @@ queue_destroy (struct MeshPeerQueue *queue, int clear_cls)
       unsigned int j2;
       unsigned int j3;
 
-      for (j = i; j < cinfo->send_buffer_n - 1; j++)
+      for (j = i, j2 = 0, j3 = 0; j < cinfo->send_buffer_n - 1; j++)
       {
         j2 = (cinfo->send_buffer_start + j) % max;
         j3 = (cinfo->send_buffer_start + j + 1) % max;
         cinfo->send_buffer[j2] = cinfo->send_buffer[j3];
       }
+
       cinfo->send_buffer[j3] = NULL;
+
       cinfo->send_buffer_n--;
     }
   }
@@ -7770,6 +7776,11 @@ core_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer)
       queue_destroy(q, GNUNET_YES);
       q = n;
   }
+  if (NULL != pi->core_transmit)
+  {
+    GNUNET_CORE_notify_transmit_ready_cancel(pi->core_transmit);
+    pi->core_transmit = NULL;
+  }
   peer_info_remove_path (pi, pi->id, myid);
   if (myid == pi->id)
   {