diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2012-08-31 12:05:47 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2012-08-31 12:05:47 +0000 |
commit | ba0cbafc1f7fbd95bbe742f4eaa1bff620929115 (patch) | |
tree | e986fc236a2714e0f18d73dbf09e32a19e0b058b | |
parent | 86def70ff719860f412e71e60058e95164204987 (diff) | |
download | gnunet-ba0cbafc1f7fbd95bbe742f4eaa1bff620929115.tar.gz gnunet-ba0cbafc1f7fbd95bbe742f4eaa1bff620929115.zip |
check if peer has already been stopped before attempting to stop it again
-rw-r--r-- | src/testbed/test_testbed_api_testbed_run.c | 16 | ||||
-rw-r--r-- | src/testbed/testbed_api_testbed.c | 9 |
2 files changed, 22 insertions, 3 deletions
diff --git a/src/testbed/test_testbed_api_testbed_run.c b/src/testbed/test_testbed_api_testbed_run.c index a9a2a8192..2a7c77af0 100644 --- a/src/testbed/test_testbed_api_testbed_run.c +++ b/src/testbed/test_testbed_api_testbed_run.c | |||
@@ -39,6 +39,11 @@ | |||
39 | static struct GNUNET_TESTBED_Peer *peers[NUM_PEERS]; | 39 | static struct GNUNET_TESTBED_Peer *peers[NUM_PEERS]; |
40 | 40 | ||
41 | /** | 41 | /** |
42 | * Operation handle | ||
43 | */ | ||
44 | static struct GNUNET_TESTBED_Operation *op; | ||
45 | |||
46 | /** | ||
42 | * Abort task identifier | 47 | * Abort task identifier |
43 | */ | 48 | */ |
44 | static GNUNET_SCHEDULER_TaskIdentifier abort_task; | 49 | static GNUNET_SCHEDULER_TaskIdentifier abort_task; |
@@ -95,8 +100,9 @@ static void | |||
95 | master_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | 100 | master_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
96 | { | 101 | { |
97 | result = GNUNET_OK; | 102 | result = GNUNET_OK; |
98 | /* Artificial delay */ | 103 | GNUNET_assert (NULL != peers[0]); |
99 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &do_shutdown, NULL); | 104 | op = GNUNET_TESTBED_peer_stop (peers[0]); |
105 | GNUNET_assert (NULL != op); | ||
100 | } | 106 | } |
101 | 107 | ||
102 | 108 | ||
@@ -118,6 +124,12 @@ controller_event_cb (void *cls, | |||
118 | GNUNET_assert (NULL != event->details.peer_start.peer); | 124 | GNUNET_assert (NULL != event->details.peer_start.peer); |
119 | peers[peer_id++] = event->details.peer_start.peer; | 125 | peers[peer_id++] = event->details.peer_start.peer; |
120 | break; | 126 | break; |
127 | case GNUNET_TESTBED_ET_PEER_STOP: | ||
128 | GNUNET_assert (NULL != op); | ||
129 | GNUNET_TESTBED_operation_done (op); | ||
130 | GNUNET_assert (peers[0] == event->details.peer_stop.peer); | ||
131 | GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); | ||
132 | break; | ||
121 | default: | 133 | default: |
122 | GNUNET_assert (0); | 134 | GNUNET_assert (0); |
123 | } | 135 | } |
diff --git a/src/testbed/testbed_api_testbed.c b/src/testbed/testbed_api_testbed.c index fb9ed31b6..f9b67676e 100644 --- a/src/testbed/testbed_api_testbed.c +++ b/src/testbed/testbed_api_testbed.c | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | #include "platform.h" | 28 | #include "platform.h" |
29 | #include "gnunet_testbed_service.h" | 29 | #include "gnunet_testbed_service.h" |
30 | #include "testbed_api_peers.h" | ||
30 | 31 | ||
31 | /** | 32 | /** |
32 | * Generic loggins shorthand | 33 | * Generic loggins shorthand |
@@ -500,13 +501,19 @@ shutdown_run_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
500 | rc->peer_count = 0; | 501 | rc->peer_count = 0; |
501 | for (peer = 0; peer < rc->num_peers; peer++) | 502 | for (peer = 0; peer < rc->num_peers; peer++) |
502 | { | 503 | { |
504 | if (PS_STARTED != rc->peers[peer]->state) | ||
505 | { | ||
506 | rc->peer_count++; | ||
507 | continue; | ||
508 | } | ||
503 | dll_op = GNUNET_malloc (sizeof (struct DLLOperation)); | 509 | dll_op = GNUNET_malloc (sizeof (struct DLLOperation)); |
504 | dll_op->op = GNUNET_TESTBED_peer_stop (rc->peers[peer]); | 510 | dll_op->op = GNUNET_TESTBED_peer_stop (rc->peers[peer]); |
505 | dll_op->cls = rc->peers[peer]; | 511 | dll_op->cls = rc->peers[peer]; |
506 | GNUNET_CONTAINER_DLL_insert_tail (rc->dll_op_head, rc->dll_op_tail, | 512 | GNUNET_CONTAINER_DLL_insert_tail (rc->dll_op_head, rc->dll_op_tail, |
507 | dll_op); | 513 | dll_op); |
508 | } | 514 | } |
509 | return; | 515 | if (rc->peer_count != rc->num_peers) |
516 | return; | ||
510 | } | 517 | } |
511 | } | 518 | } |
512 | rc->state = RC_PEERS_DESTROYED; /* No peers are present so we consider the | 519 | rc->state = RC_PEERS_DESTROYED; /* No peers are present so we consider the |