- set tunnel cstate to SEARCH when 0 connections are present
authorBart Polot <bart@net.in.tum.de>
Mon, 28 Jul 2014 05:12:38 +0000 (05:12 +0000)
committerBart Polot <bart@net.in.tum.de>
Mon, 28 Jul 2014 05:12:38 +0000 (05:12 +0000)
src/cadet/gnunet-service-cadet_tunnel.c

index 189c94ff87787b5a453f288fb03a6d657f495459..0c797da5ec9d7ec44ee6aa16a525da68b325e378 100644 (file)
@@ -2371,6 +2371,7 @@ GCT_remove_connection (struct CadetTunnel *t,
 {
   struct CadetTConnection *aux;
   struct CadetTConnection *next;
+  unsigned int conns;
 
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Removing connection %s from tunnel %s\n",
        GCC_2s (c), GCT_2s (t));
@@ -2384,14 +2385,18 @@ GCT_remove_connection (struct CadetTunnel *t,
     }
   }
 
+  conns = GCT_count_connections (t);
+  if (0 == conns)
+    GCT_change_cstate (t, CADET_TUNNEL_SEARCHING);
+
   /* Start new connections if needed */
-  if (CONNECTIONS_PER_TUNNEL > GCT_count_connections (t)
+  if (CONNECTIONS_PER_TUNNEL > conns
       && GNUNET_SCHEDULER_NO_TASK == t->destroy_task
       && CADET_TUNNEL_SHUTDOWN != t->cstate
       && GNUNET_NO == shutting_down)
   {
     LOG (GNUNET_ERROR_TYPE_DEBUG, "  too few connections, getting new ones\n");
-    GCP_connect (t->peer);
+    GCP_connect (t->peer); /* Will change cstate to WAITING when possible */
     return;
   }
 
@@ -2403,8 +2408,6 @@ GCT_remove_connection (struct CadetTunnel *t,
   for (aux = t->connection_head; aux != NULL; aux = aux->next)
     if (CADET_CONNECTION_READY == GCC_get_state (aux->c))
       return;
-
-  GCT_change_cstate (t, CADET_TUNNEL_WAITING);
 }