From: Nathan S. Evans Date: Fri, 5 Feb 2010 15:22:13 +0000 (+0000) Subject: changes to continuations required change of state machine maintenance (or so I claim) X-Git-Tag: initial-import-from-subversion-38251~22779 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=3229140d0264b5e51b1f9d13354ee28dc6c9b683;p=oweals%2Fgnunet.git changes to continuations required change of state machine maintenance (or so I claim) --- diff --git a/src/core/gnunet-service-core.c b/src/core/gnunet-service-core.c index 0150ec8f3..f86514a93 100644 --- a/src/core/gnunet-service-core.c +++ b/src/core/gnunet-service-core.c @@ -1508,6 +1508,21 @@ retry_plaintext_processing (void *cls, */ static void send_key (struct Neighbour *n); +/** + * Task that will retry "send_key" if our previous attempt failed + * to yield a PONG. + */ +static void +set_key_retry_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + struct Neighbour *n = cls; + + n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK; + n->set_key_retry_frequency = + GNUNET_TIME_relative_multiply (n->set_key_retry_frequency, 2); + send_key (n); +} + /** * Check if we have plaintext messages for the specified neighbour @@ -1545,6 +1560,13 @@ process_plaintext_neighbour_queue (struct Neighbour *n) #endif return; case PEER_STATE_KEY_SENT: + if (n->retry_set_key_task == GNUNET_SCHEDULER_NO_TASK) + { + n->retry_set_key_task + = GNUNET_SCHEDULER_add_delayed (sched, + n->set_key_retry_frequency, + &set_key_retry_task, n); + } GNUNET_assert (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK); #if DEBUG_CORE @@ -1554,6 +1576,13 @@ process_plaintext_neighbour_queue (struct Neighbour *n) #endif return; case PEER_STATE_KEY_RECEIVED: + if (n->retry_set_key_task == GNUNET_SCHEDULER_NO_TASK) + { + n->retry_set_key_task + = GNUNET_SCHEDULER_add_delayed (sched, + n->set_key_retry_frequency, + &set_key_retry_task, n); + } GNUNET_assert (n->retry_set_key_task != GNUNET_SCHEDULER_NO_TASK); #if DEBUG_CORE @@ -1917,22 +1946,6 @@ static struct GNUNET_SERVER_MessageHandler handlers[] = { }; -/** - * Task that will retry "send_key" if our previous attempt failed - * to yield a PONG. - */ -static void -set_key_retry_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - struct Neighbour *n = cls; - - n->retry_set_key_task = GNUNET_SCHEDULER_NO_TASK; - n->set_key_retry_frequency = - GNUNET_TIME_relative_multiply (n->set_key_retry_frequency, 2); - send_key (n); -} - - /** * PEERINFO is giving us a HELLO for a peer. Add the public key to * the neighbour's struct and retry send_key. Or, if we did not get a @@ -1962,9 +1975,9 @@ process_hello_retry_send_key (void *cls, send_key (n); else n->retry_set_key_task - = GNUNET_SCHEDULER_add_delayed (sched, - n->set_key_retry_frequency, - &set_key_retry_task, n); + = GNUNET_SCHEDULER_add_delayed (sched, + n->set_key_retry_frequency, + &set_key_retry_task, n); return; }