aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2012-08-31 12:05:47 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2012-08-31 12:05:47 +0000
commitba0cbafc1f7fbd95bbe742f4eaa1bff620929115 (patch)
treee986fc236a2714e0f18d73dbf09e32a19e0b058b /src
parent86def70ff719860f412e71e60058e95164204987 (diff)
downloadgnunet-ba0cbafc1f7fbd95bbe742f4eaa1bff620929115.tar.gz
gnunet-ba0cbafc1f7fbd95bbe742f4eaa1bff620929115.zip
check if peer has already been stopped before attempting to stop it again
Diffstat (limited to 'src')
-rw-r--r--src/testbed/test_testbed_api_testbed_run.c16
-rw-r--r--src/testbed/testbed_api_testbed.c9
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 @@
39static struct GNUNET_TESTBED_Peer *peers[NUM_PEERS]; 39static struct GNUNET_TESTBED_Peer *peers[NUM_PEERS];
40 40
41/** 41/**
42 * Operation handle
43 */
44static struct GNUNET_TESTBED_Operation *op;
45
46/**
42 * Abort task identifier 47 * Abort task identifier
43 */ 48 */
44static GNUNET_SCHEDULER_TaskIdentifier abort_task; 49static GNUNET_SCHEDULER_TaskIdentifier abort_task;
@@ -95,8 +100,9 @@ static void
95master_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) 100master_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