-fixing #2391
authorChristian Grothoff <christian@grothoff.org>
Fri, 1 Jun 2012 12:01:20 +0000 (12:01 +0000)
committerChristian Grothoff <christian@grothoff.org>
Fri, 1 Jun 2012 12:01:20 +0000 (12:01 +0000)
src/transport/gnunet-service-transport_neighbours.c

index 9636fff6e77a1db3181144375bcbafeb0b1210bb..c5801685ac8b7d785c68f875f379cddc5b0a0a7a 100644 (file)
@@ -2306,11 +2306,12 @@ master_task (void *cls,
   struct GNUNET_TIME_Relative delay;
 
   n->task = GNUNET_SCHEDULER_NO_TASK;
+  delay = GNUNET_TIME_absolute_get_remaining (n->timeout);  
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
-             "master task runs for neighbour `%s' in state %d\n",
+             "master task runs for neighbour `%s' in state %d with timeout in %llu ms\n",
              GNUNET_i2s (&n->id),
-             n->state);
-  delay = GNUNET_TIME_absolute_get_remaining (n->timeout);  
+             n->state,
+             (unsigned long long) delay.rel_value);
   switch (n->state)
   {
   case S_NOT_CONNECTED:
@@ -2465,8 +2466,16 @@ master_task (void *cls,
     GNUNET_break (0);
     break;  
   }
-  delay = GNUNET_TIME_relative_min (GNUNET_TIME_absolute_get_remaining (n->keep_alive_time),
-                                   delay);
+  if ( (S_CONNECTED_SWITCHING_CONNECT_SENT == n->state) ||
+       (S_CONNECTED_SWITCHING_BLACKLIST == n->state) ||
+       (S_CONNECTED == n->state) )    
+  {
+    /* if we are *now* in one of these three states, we're sending
+       keep alive messages, so we need to consider the keepalive
+       delay, not just the connection timeout */
+    delay = GNUNET_TIME_relative_min (GNUNET_TIME_absolute_get_remaining (n->keep_alive_time),
+                                     delay);
+  }
   if (GNUNET_SCHEDULER_NO_TASK == n->task)
     n->task = GNUNET_SCHEDULER_add_delayed (delay,
                                            &master_task,