Don't pass NULL to destroy_route
[oweals/gnunet.git] / src / cadet / gnunet-service-cadet-new_core.c
index 75a94119ca953e04db5c3db75679cb9296354f2c..9cd6055c24bbfe5afd7673c31bfa8eca5866cee0 100644 (file)
@@ -47,6 +47,7 @@
 
 /**
  * Number of messages we are willing to buffer per route.
+ * FIXME: have global buffer pool instead!
  */
 #define ROUTE_BUFFER_SIZE 8
 
@@ -325,6 +326,10 @@ destroy_route (struct CadetRoute *route)
        GNUNET_sh2s (&route->cid.connection_of_tunnel));
   GNUNET_assert (route ==
                  GNUNET_CONTAINER_heap_remove_node (route->hn));
+  GNUNET_assert (GNUNET_YES ==
+                 GNUNET_CONTAINER_multishortmap_remove (routes,
+                                                        &route->cid.connection_of_tunnel,
+                                                        route));
   destroy_direction (&route->prev);
   destroy_direction (&route->next);
   GNUNET_free (route);
@@ -757,11 +762,12 @@ handle_connection_broken (void *cls,
   }
 
   /* We're just an intermediary peer, route the message along its path */
-  route = get_route (&msg->cid);
   route_message (peer,
                  &msg->cid,
                  &msg->header);
-  destroy_route (route);
+  route = get_route (&msg->cid);
+  if (NULL != route)
+    destroy_route (route);
   /* FIXME: also destroy paths we MAY have up to the specified link! */
 }
 
@@ -808,11 +814,12 @@ handle_connection_destroy (void *cls,
   LOG (GNUNET_ERROR_TYPE_DEBUG,
        "Received CONNECTION_DESTROY for connection %s. Destroying route.\n",
        GNUNET_sh2s (&msg->cid.connection_of_tunnel));
-  route = get_route (&msg->cid);
   route_message (peer,
                  &msg->cid,
                  &msg->header);
-  destroy_route (route);
+  route = get_route (&msg->cid);
+  if (NULL != route)
+    destroy_route (route);
 }