From: Christian Grothoff Date: Fri, 1 Jun 2012 12:01:20 +0000 (+0000) Subject: -fixing #2391 X-Git-Tag: initial-import-from-subversion-38251~13307 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8dd4af4649e304dd4be8d4c6c984f3f5a9481643;p=oweals%2Fgnunet.git -fixing #2391 --- diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index 9636fff6e..c5801685a 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c @@ -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,