gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r28576 - gnunet/src/mesh


From: gnunet
Subject: [GNUnet-SVN] r28576 - gnunet/src/mesh
Date: Tue, 13 Aug 2013 19:17:57 +0200

Author: bartpolot
Date: 2013-08-13 19:17:57 +0200 (Tue, 13 Aug 2013)
New Revision: 28576

Modified:
   gnunet/src/mesh/gnunet-service-mesh-enc.c
Log:
- fix core cancel on shutdown


Modified: gnunet/src/mesh/gnunet-service-mesh-enc.c
===================================================================
--- gnunet/src/mesh/gnunet-service-mesh-enc.c   2013-08-13 17:10:07 UTC (rev 
28575)
+++ gnunet/src/mesh/gnunet-service-mesh-enc.c   2013-08-13 17:17:57 UTC (rev 
28576)
@@ -54,7 +54,7 @@
 #define MESH_BLOOM_SIZE         128
 
 #define MESH_DEBUG_DHT          GNUNET_NO
-#define MESH_DEBUG_CONNECTION   GNUNET_NO
+#define MESH_DEBUG_CONNECTION   GNUNET_YES
 #define MESH_DEBUG_TIMING       __LINUX__ && GNUNET_NO
 
 #define MESH_MAX_POLL_TIME      GNUNET_TIME_relative_multiply (\
@@ -2903,6 +2903,7 @@
 tunnel_use_path (struct MeshTunnel2 *t, struct MeshPeerPath *p)
 {
   struct MeshConnection *c;
+  struct MeshPeer *peer;
   unsigned int own_pos;
 
   c = connection_new (&t->id, t->next_cid++);
@@ -2926,6 +2927,13 @@
         GNUNET_SCHEDULER_add_delayed (refresh_connection_time,
                                       &connection_fwd_keepalive, c);
   }
+
+  peer = connection_get_next_hop (c);
+  GNUNET_CONTAINER_multihashmap_put (peer->connections, &c->t->id, c,
+                                     
GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
+  peer = connection_get_prev_hop (c);
+  GNUNET_CONTAINER_multihashmap_put (peer->connections, &c->t->id, c,
+                                     
GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE);
   return c;
 }
 
@@ -3816,6 +3824,8 @@
 static void
 connection_destroy (struct MeshConnection *c)
 {
+  struct MeshPeer *peer;
+
   if (NULL == c)
     return;
 
@@ -3823,17 +3833,27 @@
               peer2s (c->t->peer),
               c->id);
 
+  /* Cancel all traffic */
   connection_cancel_queues (c, GNUNET_YES);
   connection_cancel_queues (c, GNUNET_NO);
 
+  /* Cancel maintainance task (keepalive/timeout) */
   if (GNUNET_SCHEDULER_NO_TASK != c->fwd_maintenance_task)
     GNUNET_SCHEDULER_cancel (c->fwd_maintenance_task);
   if (GNUNET_SCHEDULER_NO_TASK != c->bck_maintenance_task)
     GNUNET_SCHEDULER_cancel (c->bck_maintenance_task);
 
-  GNUNET_CONTAINER_DLL_remove (c->t->connection_head, c->t->connection_tail, 
c);
+  /* Deregister from neighbors */
+  peer = connection_get_next_hop (c);
+  if (NULL != peer)
+    GNUNET_CONTAINER_multihashmap_remove (peer->connections, &c->t->id, c);
+  peer = connection_get_prev_hop (c);
+  if (NULL != peer)
+    GNUNET_CONTAINER_multihashmap_remove (peer->connections, &c->t->id, c);
 
+  /* Delete */
   GNUNET_STATISTICS_update (stats, "# connections", -1, GNUNET_NO);
+  GNUNET_CONTAINER_DLL_remove (c->t->connection_head, c->t->connection_tail, 
c);
   GNUNET_free (c);
 }
 




reply via email to

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