diff options
author | Christian Grothoff <christian@grothoff.org> | 2014-12-24 01:10:47 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2014-12-24 01:10:47 +0000 |
commit | f1f603c7d0b3f03dca46a4f313472288eb080eb1 (patch) | |
tree | 3a29966b02dfb83e0a8a8d5c42b3116380209fb0 /src/dht/gnunet_dht_profiler.c | |
parent | 53cd5b8eda2fa8db86b0907a62a39598981d008a (diff) | |
download | gnunet-f1f603c7d0b3f03dca46a4f313472288eb080eb1.tar.gz gnunet-f1f603c7d0b3f03dca46a4f313472288eb080eb1.zip |
making GNUNET_SCHEDULER_cancel() perform in O(1) instead of O(n) to help or even fully address #3247
Diffstat (limited to 'src/dht/gnunet_dht_profiler.c')
-rw-r--r-- | src/dht/gnunet_dht_profiler.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/src/dht/gnunet_dht_profiler.c b/src/dht/gnunet_dht_profiler.c index f6223b3dd..668f61aef 100644 --- a/src/dht/gnunet_dht_profiler.c +++ b/src/dht/gnunet_dht_profiler.c | |||
@@ -195,7 +195,7 @@ struct ActiveContext | |||
195 | /** | 195 | /** |
196 | * Delay task | 196 | * Delay task |
197 | */ | 197 | */ |
198 | GNUNET_SCHEDULER_TaskIdentifier delay_task; | 198 | struct GNUNET_SCHEDULER_Task * delay_task; |
199 | 199 | ||
200 | /** | 200 | /** |
201 | * The size of the @e put_data | 201 | * The size of the @e put_data |
@@ -357,7 +357,7 @@ static int flag = 0; | |||
357 | /** | 357 | /** |
358 | * Task to collect peer and its current successor statistics. | 358 | * Task to collect peer and its current successor statistics. |
359 | */ | 359 | */ |
360 | static GNUNET_SCHEDULER_TaskIdentifier successor_stats_task; | 360 | static struct GNUNET_SCHEDULER_Task * successor_stats_task; |
361 | 361 | ||
362 | /** | 362 | /** |
363 | * Closure for successor_stats_task. | 363 | * Closure for successor_stats_task. |
@@ -441,7 +441,7 @@ do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
441 | ac = a_ctx[cnt].ac; | 441 | ac = a_ctx[cnt].ac; |
442 | if (NULL != ac) | 442 | if (NULL != ac) |
443 | { | 443 | { |
444 | if (GNUNET_SCHEDULER_NO_TASK != ac->delay_task) | 444 | if (NULL != ac->delay_task) |
445 | GNUNET_SCHEDULER_cancel (ac->delay_task); | 445 | GNUNET_SCHEDULER_cancel (ac->delay_task); |
446 | if (NULL != ac->put_data) | 446 | if (NULL != ac->put_data) |
447 | GNUNET_free (ac->put_data); | 447 | GNUNET_free (ac->put_data); |
@@ -554,7 +554,7 @@ cancel_get (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
554 | struct ActiveContext *ac = cls; | 554 | struct ActiveContext *ac = cls; |
555 | struct Context *ctx = ac->ctx; | 555 | struct Context *ctx = ac->ctx; |
556 | 556 | ||
557 | ac->delay_task = GNUNET_SCHEDULER_NO_TASK; | 557 | ac->delay_task = NULL; |
558 | GNUNET_assert (NULL != ac->dht_get); | 558 | GNUNET_assert (NULL != ac->dht_get); |
559 | GNUNET_DHT_get_stop (ac->dht_get); | 559 | GNUNET_DHT_get_stop (ac->dht_get); |
560 | ac->dht_get = NULL; | 560 | ac->dht_get = NULL; |
@@ -613,9 +613,9 @@ get_iter (void *cls, | |||
613 | get_ac->nrefs--; | 613 | get_ac->nrefs--; |
614 | GNUNET_DHT_get_stop (ac->dht_get); | 614 | GNUNET_DHT_get_stop (ac->dht_get); |
615 | ac->dht_get = NULL; | 615 | ac->dht_get = NULL; |
616 | if (ac->delay_task != GNUNET_SCHEDULER_NO_TASK) | 616 | if (ac->delay_task != NULL) |
617 | GNUNET_SCHEDULER_cancel (ac->delay_task); | 617 | GNUNET_SCHEDULER_cancel (ac->delay_task); |
618 | ac->delay_task = GNUNET_SCHEDULER_NO_TASK; | 618 | ac->delay_task = NULL; |
619 | GNUNET_assert (NULL != ctx->op); | 619 | GNUNET_assert (NULL != ctx->op); |
620 | GNUNET_TESTBED_operation_done (ctx->op); | 620 | GNUNET_TESTBED_operation_done (ctx->op); |
621 | ctx->op = NULL; | 621 | ctx->op = NULL; |
@@ -646,7 +646,7 @@ delayed_get (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
646 | struct ActiveContext *get_ac; | 646 | struct ActiveContext *get_ac; |
647 | unsigned int r; | 647 | unsigned int r; |
648 | 648 | ||
649 | ac->delay_task = GNUNET_SCHEDULER_NO_TASK; | 649 | ac->delay_task = NULL; |
650 | get_ac = NULL; | 650 | get_ac = NULL; |
651 | while (1) | 651 | while (1) |
652 | { | 652 | { |
@@ -735,7 +735,7 @@ delayed_put (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
735 | { | 735 | { |
736 | struct ActiveContext *ac = cls; | 736 | struct ActiveContext *ac = cls; |
737 | 737 | ||
738 | ac->delay_task = GNUNET_SCHEDULER_NO_TASK; | 738 | ac->delay_task = NULL; |
739 | /* Generate and DHT PUT some random data */ | 739 | /* Generate and DHT PUT some random data */ |
740 | ac->put_data_size = 16; /* minimum */ | 740 | ac->put_data_size = 16; /* minimum */ |
741 | ac->put_data_size += GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, | 741 | ac->put_data_size += GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, |
@@ -1065,7 +1065,7 @@ successor_stats_cont (void *cls, | |||
1065 | int count; | 1065 | int count; |
1066 | 1066 | ||
1067 | /* Don't schedule the task till we are looking for circle here. */ | 1067 | /* Don't schedule the task till we are looking for circle here. */ |
1068 | successor_stats_task = GNUNET_SCHEDULER_NO_TASK; | 1068 | successor_stats_task = NULL; |
1069 | GNUNET_TESTBED_operation_done (successor_stats_op); | 1069 | GNUNET_TESTBED_operation_done (successor_stats_op); |
1070 | successor_stats_op = NULL; | 1070 | successor_stats_op = NULL; |
1071 | if (0 == max_searches) | 1071 | if (0 == max_searches) |
@@ -1109,7 +1109,7 @@ successor_stats_cont (void *cls, | |||
1109 | if ((start_val == val) && (count == num_peers)) | 1109 | if ((start_val == val) && (count == num_peers)) |
1110 | { | 1110 | { |
1111 | DEBUG("CIRCLE COMPLETED after %u tries", tries); | 1111 | DEBUG("CIRCLE COMPLETED after %u tries", tries); |
1112 | if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task) | 1112 | if(NULL == successor_stats_task) |
1113 | { | 1113 | { |
1114 | start_func(); | 1114 | start_func(); |
1115 | } | 1115 | } |
@@ -1123,11 +1123,11 @@ successor_stats_cont (void *cls, | |||
1123 | "Maximum tries %u exceeded while checking successor TOTAL TRIES %u" | 1123 | "Maximum tries %u exceeded while checking successor TOTAL TRIES %u" |
1124 | " circle formation. Exiting\n", | 1124 | " circle formation. Exiting\n", |
1125 | max_searches,tries); | 1125 | max_searches,tries); |
1126 | if (GNUNET_SCHEDULER_NO_TASK != successor_stats_task) | 1126 | if (NULL != successor_stats_task) |
1127 | { | 1127 | { |
1128 | successor_stats_task = GNUNET_SCHEDULER_NO_TASK; | 1128 | successor_stats_task = NULL; |
1129 | } | 1129 | } |
1130 | if(GNUNET_SCHEDULER_NO_TASK == successor_stats_task) | 1130 | if(NULL == successor_stats_task) |
1131 | { | 1131 | { |
1132 | start_func(); | 1132 | start_func(); |
1133 | } | 1133 | } |
@@ -1255,7 +1255,7 @@ service_started (void *cls, | |||
1255 | ctx->op = NULL; | 1255 | ctx->op = NULL; |
1256 | peers_started++; | 1256 | peers_started++; |
1257 | DEBUG("Peers Started = %d; num_peers = %d \n", peers_started, num_peers); | 1257 | DEBUG("Peers Started = %d; num_peers = %d \n", peers_started, num_peers); |
1258 | if (GNUNET_SCHEDULER_NO_TASK == successor_stats_task && peers_started == num_peers) | 1258 | if (NULL == successor_stats_task && peers_started == num_peers) |
1259 | { | 1259 | { |
1260 | DEBUG("successor_stats_task \n"); | 1260 | DEBUG("successor_stats_task \n"); |
1261 | struct Collect_Stat_Context *collect_stat_cls = GNUNET_new(struct Collect_Stat_Context); | 1261 | struct Collect_Stat_Context *collect_stat_cls = GNUNET_new(struct Collect_Stat_Context); |