From a650784d047ee1e4bed32946d90e239bd50a55aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1=D1?= =?UTF-8?q?=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Sat, 26 Nov 2011 15:53:07 +0400 Subject: [PATCH 2/3] Fix dht multipeer testing crash --- src/testing/testing_group.c | 19 ++++++++++++++++--- 1 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/testing/testing_group.c b/src/testing/testing_group.c index db763d2..f22bb2b 100644 --- a/src/testing/testing_group.c +++ b/src/testing/testing_group.c @@ -550,6 +550,12 @@ struct PeerData * stagger hostkey generation and peer startup. */ struct InternalStartContext internal_context; + + /** + * Task ID for the queued internal_continue_startup task + */ + GNUNET_SCHEDULER_TaskIdentifier startup_task; + }; /** @@ -5557,6 +5563,7 @@ internal_continue_startup (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { struct InternalStartContext *internal_context = cls; + internal_context->peer->startup_task = GNUNET_SCHEDULER_NO_TASK; if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0) { @@ -5579,7 +5586,7 @@ internal_continue_startup (void *cls, } else { - GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply + internal_context->peer->startup_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 100), &internal_continue_startup, internal_context); } @@ -5887,7 +5894,7 @@ GNUNET_TESTING_daemons_continue_startup (struct GNUNET_TESTING_PeerGroup *pg) pg->starting = 0; for (i = 0; i < pg->total; i++) { - GNUNET_SCHEDULER_add_now (&internal_continue_startup, + pg->peers[i].startup_task = GNUNET_SCHEDULER_add_now (&internal_continue_startup, &pg->peers[i].internal_context); } } @@ -5895,7 +5902,7 @@ GNUNET_TESTING_daemons_continue_startup (struct GNUNET_TESTING_PeerGroup *pg) pg->starting = 0; for (i = 0; i < pg->total; i++) { - GNUNET_SCHEDULER_add_now (&internal_continue_startup, + pg->peers[i].startup_task = GNUNET_SCHEDULER_add_now (&internal_continue_startup, &pg->peers[i].internal_context); } #endif @@ -6903,6 +6910,7 @@ internal_shutdown_callback (void *cls, const char *emsg) struct PeerShutdownContext *peer_shutdown_ctx = cls; struct ShutdownContext *shutdown_ctx = peer_shutdown_ctx->shutdown_ctx; unsigned int off; + int i; struct OutstandingSSH *ssh_pos; shutdown_ctx->outstanding--; @@ -6933,6 +6941,11 @@ internal_shutdown_callback (void *cls, const char *emsg) else shutdown_ctx->cb (shutdown_ctx->cb_cls, NULL); + for (i = 0; i < shutdown_ctx->pg->total; i++) + { + if (shutdown_ctx->pg->peers[i].startup_task != GNUNET_SCHEDULER_NO_TASK) + GNUNET_SCHEDULER_cancel (shutdown_ctx->pg->peers[i].startup_task); + } GNUNET_free (shutdown_ctx->pg->peers); GNUNET_free_non_null (shutdown_ctx->pg->hostkey_data); for (off = 0; off < shutdown_ctx->pg->num_hosts; off++) -- 1.7.4