[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r34213 - gnunet/src/dht
From: |
gnunet |
Subject: |
[GNUnet-SVN] r34213 - gnunet/src/dht |
Date: |
Sun, 24 Aug 2014 03:15:38 +0200 |
Author: supriti
Date: 2014-08-24 03:15:38 +0200 (Sun, 24 Aug 2014)
New Revision: 34213
Modified:
gnunet/src/dht/gnunet-service-xdht_neighbours.c
Log:
Fix
Modified: gnunet/src/dht/gnunet-service-xdht_neighbours.c
===================================================================
--- gnunet/src/dht/gnunet-service-xdht_neighbours.c 2014-08-24 00:44:51 UTC
(rev 34212)
+++ gnunet/src/dht/gnunet-service-xdht_neighbours.c 2014-08-24 01:15:38 UTC
(rev 34213)
@@ -3164,6 +3164,10 @@
return;
}
+struct VerifySuccessorContext
+{
+ unsigned int num_retries_scheduled;
+};
/**
* Periodic task to verify current successor. There can be multiple trails to
reach
@@ -3187,13 +3191,44 @@
/* This task will be scheduled when the result for Verify Successor is
received. */
send_verify_successor_task = GNUNET_SCHEDULER_NO_TASK;
- if (send_verify_successor_retry_task == GNUNET_SCHEDULER_NO_TASK)
+ /* When verify successor is being called for first time *for current context*
+ * cls will be NULL. If send_verify_successor_retry_task is not NO_TASK, we
+ * must cancel the retry task scheduled for verify_successor of previous
+ * context.
+ */
+ if (NULL == cls)
{
+ if (send_verify_successor_retry_task != GNUNET_SCHEDULER_NO_TASK)
+ {
+ struct VerifySuccessorContext *old_ctx =
+ GNUNET_SCHEDULER_cancel(send_verify_successor_retry_task);
+ /* old_ctx must not be NULL, as the retry task had been scheduled */
+ GNUNET_assert(NULL != old_ctx);
+ GNUNET_free(old_ctx);
+ }
+
+ struct VerifySuccessorContext *ctx;
+ ctx = GNUNET_new(struct VerifySuccessorContext);
+
+ ctx->num_retries_scheduled++;
send_verify_successor_retry_task =
GNUNET_SCHEDULER_add_delayed (verify_successor_retry_time,
&send_verify_successor_message,
- NULL);
+ ctx);
+ }
+ else
+ {
+ /* This is a retry attempt for verify_successor for a previous context */
+ struct VerifySuccessorContext *ctx;
+
+ ctx = cls;
+ ctx->num_retries_scheduled++;
+ send_verify_successor_retry_task =
+ GNUNET_SCHEDULER_add_delayed (verify_successor_retry_time,
+ &send_verify_successor_message,
+ ctx);
}
+
successor = &finger_table[0];
/* We are waiting for a confirmation from the notify message and we have not
* crossed the wait time, then return. */
@@ -5212,7 +5247,9 @@
/* Cancel Retry Task */
if (GNUNET_SCHEDULER_NO_TASK != send_verify_successor_retry_task)
{
- GNUNET_SCHEDULER_cancel(send_verify_successor_retry_task);
+ struct VerifySuccessorContext *ctx;
+ ctx = GNUNET_SCHEDULER_cancel(send_verify_successor_retry_task);
+ GNUNET_free(ctx);
send_verify_successor_retry_task = GNUNET_SCHEDULER_NO_TASK;
}
compare_and_update_successor (current_successor,
@@ -6138,7 +6175,9 @@
if (GNUNET_SCHEDULER_NO_TASK != send_verify_successor_retry_task)
{
- GNUNET_SCHEDULER_cancel (send_verify_successor_retry_task);
+ struct VerifySuccessorContext *ctx;
+ ctx = GNUNET_SCHEDULER_cancel (send_verify_successor_retry_task);
+ GNUNET_free(ctx);
send_verify_successor_retry_task = GNUNET_SCHEDULER_NO_TASK;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r34213 - gnunet/src/dht,
gnunet <=