- doc
[oweals/gnunet.git] / src / mesh / gnunet-service-mesh.c
index 7a04302b062916844df730dc9055c590131117b2..7ebe7d199d188696f36268b002a872fa3a1b1ae1 100644 (file)
@@ -4585,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;
@@ -4624,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--;
     }
   }
@@ -7772,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)
   {