[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r23529 - gnunet/src/testbed
From: |
gnunet |
Subject: |
[GNUnet-SVN] r23529 - gnunet/src/testbed |
Date: |
Fri, 31 Aug 2012 12:05:09 +0200 |
Author: harsha
Date: 2012-08-31 12:05:09 +0200 (Fri, 31 Aug 2012)
New Revision: 23529
Modified:
gnunet/src/testbed/test_testbed_api_testbed_run.c
gnunet/src/testbed/testbed_api_testbed.c
Log:
stop peers before destroying them
Modified: gnunet/src/testbed/test_testbed_api_testbed_run.c
===================================================================
--- gnunet/src/testbed/test_testbed_api_testbed_run.c 2012-08-31 07:52:40 UTC
(rev 23528)
+++ gnunet/src/testbed/test_testbed_api_testbed_run.c 2012-08-31 10:05:09 UTC
(rev 23529)
@@ -31,7 +31,7 @@
/**
* Number of peers we want to start
*/
-#define NUM_PEERS 2
+#define NUM_PEERS 50
/**
* The array of peers; we fill this as the peers are given to us by the testbed
@@ -119,7 +119,7 @@
peers[peer_id++] = event->details.peer_start.peer;
break;
default:
- GNUNET_break (0);
+ GNUNET_assert (0);
}
}
@@ -144,8 +144,8 @@
event_mask |= (1LL << GNUNET_TESTBED_ET_CONNECT);
event_mask |= (1LL << GNUNET_TESTBED_ET_DISCONNECT);
event_mask |= (1LL << GNUNET_TESTBED_ET_OPERATION_FINISHED);
- GNUNET_TESTBED_run (NULL, config, 2, event_mask, &controller_event_cb,
- NULL, &master_task, NULL);
+ GNUNET_TESTBED_run (NULL, config, NUM_PEERS, event_mask,
&controller_event_cb,
+ NULL, &master_task, NULL);
abort_task = GNUNET_SCHEDULER_add_delayed
(GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), &do_abort,
NULL);
}
Modified: gnunet/src/testbed/testbed_api_testbed.c
===================================================================
--- gnunet/src/testbed/testbed_api_testbed.c 2012-08-31 07:52:40 UTC (rev
23528)
+++ gnunet/src/testbed/testbed_api_testbed.c 2012-08-31 10:05:09 UTC (rev
23529)
@@ -76,6 +76,34 @@
/**
+ * States of RunContext
+ */
+enum State
+{
+ /**
+ * Initial state
+ */
+ RC_INIT = 0,
+
+ /**
+ * Peers have been started
+ */
+ RC_PEERS_STARTED,
+
+ /**
+ * Peers are stopped
+ */
+ RC_PEERS_STOPPED,
+
+ /**
+ * Peers are destroyed
+ */
+ RC_PEERS_DESTROYED
+
+};
+
+
+/**
* Testbed Run Handle
*/
struct RunContext
@@ -136,6 +164,11 @@
uint64_t event_mask;
/**
+ * State of this context
+ */
+ enum State state;
+
+ /**
* Current peer count for an operation; Set this to 0 and increment for each
* successful operation on a peer
*/
@@ -146,11 +179,6 @@
*/
unsigned int num_peers;
- /**
- * Are we cleaning up?
- */
- int in_shutdown;
-
};
@@ -306,6 +334,7 @@
struct DLLOperation *dll_op;
GNUNET_assert (NULL == rc->peers);
+ GNUNET_assert (RC_PEERS_DESTROYED == rc->state);
if (NULL != rc->c)
GNUNET_TESTBED_controller_disconnect (rc->c);
if (NULL != rc->cproc)
@@ -339,14 +368,21 @@
{
struct RunContext *rc = cls;
struct DLLOperation *dll_op;
+ unsigned int peer_id;
- if ((GNUNET_YES == rc->in_shutdown) &&
- (GNUNET_TESTBED_ET_OPERATION_FINISHED == event->type))
+
+ if ((RC_INIT != rc->state) &&
+ ((GNUNET_TESTBED_ET_OPERATION_FINISHED == event->type)||
+ (GNUNET_TESTBED_ET_PEER_STOP == event->type)))
{
for (dll_op = rc->dll_op_head; NULL != dll_op; dll_op = dll_op->next)
{
- if (event->details.operation_finished.operation == dll_op->op)
+ if ((GNUNET_TESTBED_ET_OPERATION_FINISHED == event->type) &&
+ (event->details.operation_finished.operation == dll_op->op))
break;
+ if ((GNUNET_TESTBED_ET_PEER_STOP == event->type) &&
+ (event->details.peer_stop.peer == dll_op->cls))
+ break;
}
if (NULL == dll_op)
goto call_cc;
@@ -356,11 +392,30 @@
rc->peer_count++;
if (rc->peer_count < rc->num_peers)
return;
- GNUNET_free (rc->peers);
- rc->peers = NULL;
- LOG (GNUNET_ERROR_TYPE_DEBUG, "All peers successfully destroyed\n");
- GNUNET_SCHEDULER_add_now (&cleanup_task, rc);
- return;
+ switch (rc->state)
+ {
+ case RC_PEERS_STARTED:
+ rc->state = RC_PEERS_STOPPED;
+ rc->peer_count = 0;
+ for (peer_id = 0; peer_id < rc->num_peers; peer_id++)
+ {
+ dll_op = GNUNET_malloc (sizeof (struct DLLOperation));
+ dll_op->op = GNUNET_TESTBED_peer_destroy (rc->peers[peer_id]);
+ GNUNET_CONTAINER_DLL_insert_tail (rc->dll_op_head, rc->dll_op_tail,
+ dll_op);
+ }
+ break;
+ case RC_PEERS_STOPPED:
+ rc->state = RC_PEERS_DESTROYED;
+ GNUNET_free (rc->peers);
+ rc->peers = NULL;
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "All peers successfully destroyed\n");
+ GNUNET_SCHEDULER_add_now (&cleanup_task, rc);
+ break;
+ default:
+ GNUNET_assert (0);
+ }
+ return;
}
call_cc:
@@ -378,7 +433,8 @@
rc->peer_count++;
if (rc->peer_count < rc->num_peers)
return;
- LOG (GNUNET_ERROR_TYPE_DEBUG, "Peers started successfully\n");
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "Peers started successfully\n");
+ rc->state = RC_PEERS_STARTED;
GNUNET_SCHEDULER_add_continuation (rc->master, rc->master_cls,
GNUNET_SCHEDULER_REASON_PREREQ_DONE);
}
@@ -434,10 +490,9 @@
shutdown_run_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct RunContext *rc = cls;
- struct DLLOperation *dll_op;
+ struct DLLOperation *dll_op;
unsigned int peer;
- rc->in_shutdown = GNUNET_YES;
if (NULL != rc->c)
{
if (NULL != rc->peers)
@@ -446,13 +501,16 @@
for (peer = 0; peer < rc->num_peers; peer++)
{
dll_op = GNUNET_malloc (sizeof (struct DLLOperation));
- dll_op->op = GNUNET_TESTBED_peer_destroy (rc->peers[peer]);
+ dll_op->op = GNUNET_TESTBED_peer_stop (rc->peers[peer]);
+ dll_op->cls = rc->peers[peer];
GNUNET_CONTAINER_DLL_insert_tail (rc->dll_op_head, rc->dll_op_tail,
- dll_op);
- }
+ dll_op);
+ }
return;
}
}
+ rc->state = RC_PEERS_DESTROYED; /* No peers are present so we consider the
+ state where all peers are destroyed */
GNUNET_SCHEDULER_add_now (&cleanup_task, rc);
}
@@ -508,7 +566,7 @@
rc->cc_cls = cc_cls;
rc->master = master;
rc->master_cls = master_cls;
- rc->in_shutdown = GNUNET_NO;
+ rc->state = RC_INIT;
GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
&shutdown_run_task, rc);
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r23529 - gnunet/src/testbed,
gnunet <=