- Remove deprecated code, coverity 10236
[oweals/gnunet.git] / src / mesh / gnunet-service-mesh.c
index 4f032835e69ef5719f42553f9ff3b74e3bcce79e..fa392901cb838d11d1cf48d536c21a91c5104aa1 100644 (file)
@@ -3077,7 +3077,22 @@ tunnel_destroy_child (void *cls,
                       const struct GNUNET_HashCode * key,
                       void *value)
 {
-  GNUNET_free (value);
+  struct MeshTunnelChildInfo *cinfo = value;
+  struct MeshTunnel *t = cls;
+  unsigned int c;
+  unsigned int i;
+
+  for (c = 0; c < cinfo->send_buffer_n; c++)
+  {
+    i = (cinfo->send_buffer_start + c) % t->fwd_queue_max;
+    if (NULL != cinfo->send_buffer[i])
+      queue_destroy(cinfo->send_buffer[i], GNUNET_YES);
+    else
+      GNUNET_break (0);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%u %u\n", c, cinfo->send_buffer_n);
+  }
+  GNUNET_free_non_null (cinfo->send_buffer);
+  GNUNET_free (cinfo);
   return GNUNET_YES;
 }
 
@@ -4711,14 +4726,30 @@ queue_send (void *cls, size_t size, void *buf)
                     queue->type);
         data_size = 0;
     }
-
-    cinfo = tunnel_get_neighbor_fc(t, &dst_id);
-    GNUNET_break(cinfo->send_buffer[cinfo->send_buffer_start] == queue);
-    GNUNET_break(cinfo->send_buffer_n > 0);
-    cinfo->send_buffer[cinfo->send_buffer_start] = NULL;
-    cinfo->send_buffer_n--;
-    cinfo->send_buffer_start++;
-    cinfo->send_buffer_start %= t->fwd_queue_max;
+    switch (queue->type)
+    {
+      case GNUNET_MESSAGE_TYPE_MESH_UNICAST:
+      case GNUNET_MESSAGE_TYPE_MESH_TO_ORIGIN:
+      case GNUNET_MESSAGE_TYPE_MESH_MULTICAST:
+        cinfo = tunnel_get_neighbor_fc(t, &dst_id);
+        if (cinfo->send_buffer[cinfo->send_buffer_start] != queue)
+        {
+          GNUNET_break(0);
+          GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                      "at pos %u (%p) != %p\n",
+                      cinfo->send_buffer_start,
+                      cinfo->send_buffer[cinfo->send_buffer_start],
+                      queue);
+        }
+        GNUNET_break(cinfo->send_buffer_n > 0);
+        cinfo->send_buffer[cinfo->send_buffer_start] = NULL;
+        cinfo->send_buffer_n--;
+        cinfo->send_buffer_start++;
+        cinfo->send_buffer_start %= t->fwd_queue_max;
+        break;
+      default:
+        break;
+    }
 
     /* Free queue, but cls was freed by send_core_* */
     queue_destroy (queue, GNUNET_NO);