[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r25669 - gnunet/src/testbed
From: |
gnunet |
Subject: |
[GNUnet-SVN] r25669 - gnunet/src/testbed |
Date: |
Tue, 1 Jan 2013 23:43:24 +0100 |
Author: harsha
Date: 2013-01-01 23:43:24 +0100 (Tue, 01 Jan 2013)
New Revision: 25669
Modified:
gnunet/src/testbed/test_testbed_api_operations.c
gnunet/src/testbed/testbed_api_operations.c
Log:
- make operations wait when max_active is decreased
Modified: gnunet/src/testbed/test_testbed_api_operations.c
===================================================================
--- gnunet/src/testbed/test_testbed_api_operations.c 2013-01-01 11:49:41 UTC
(rev 25668)
+++ gnunet/src/testbed/test_testbed_api_operations.c 2013-01-01 22:43:24 UTC
(rev 25669)
@@ -88,6 +88,12 @@
*/
TEST_OP1_RELEASED,
+ /**
+ * Temporary pause where no operations should start as we set max active in
q1
+ * to 0 in stage TEST_OP1_STARTED
+ */
+ TEST_PAUSE,
+
/**
* op2 has started
*/
@@ -99,12 +105,6 @@
TEST_OP2_RELEASED,
/**
- * Temporary pause where no operations should start as we set max active in
q1
- * to 0
- */
- TEST_PAUSE,
-
- /**
* op3 has started
*/
TEST_OP3_STARTED,
@@ -164,13 +164,13 @@
GNUNET_TESTBED_operation_queue_insert_ (q2, op3);
GNUNET_TESTBED_operation_begin_wait_ (op3);
break;
+ case TEST_OP1_RELEASED:
+ result = TEST_PAUSE;
+ GNUNET_TESTBED_operation_queue_reset_max_active_ (q1, 1);
+ break;
case TEST_OP2_STARTED:
GNUNET_TESTBED_operation_release_ (op2);
break;
- case TEST_OP2_RELEASED:
- result = TEST_PAUSE;
- GNUNET_TESTBED_operation_queue_reset_max_active_ (q1, 1);
- break;
case TEST_OP3_STARTED:
GNUNET_TESTBED_operation_release_ (op3);
break;
@@ -196,13 +196,13 @@
GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task);
step_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step,
NULL);
break;
- case TEST_OP1_RELEASED:
+ case TEST_PAUSE:
GNUNET_assert (&op2 == cls);
result = TEST_OP2_STARTED;
GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task);
step_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step,
NULL);
break;
- case TEST_PAUSE:
+ case TEST_OP2_RELEASED:
GNUNET_assert (&op3 == cls);
result = TEST_OP3_STARTED;
GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task);
@@ -232,13 +232,14 @@
GNUNET_assert (&op1 == cls);
result = TEST_OP1_RELEASED;
op1 = NULL;
- //GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step, NULL);
+ step_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step,
+ NULL);
break;
case TEST_OP2_STARTED:
GNUNET_assert (&op2 == cls);
result = TEST_OP2_RELEASED;
GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == step_task);
- step_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &step,
NULL);
+ //step_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
&step, NULL);
break;
case TEST_OP3_STARTED:
GNUNET_assert (&op3 == cls);
Modified: gnunet/src/testbed/testbed_api_operations.c
===================================================================
--- gnunet/src/testbed/testbed_api_operations.c 2013-01-01 11:49:41 UTC (rev
25668)
+++ gnunet/src/testbed/testbed_api_operations.c 2013-01-01 22:43:24 UTC (rev
25669)
@@ -189,6 +189,26 @@
/**
+ * Defers a ready to be executed operation back to waiting
+ *
+ * @param op the operation to defer
+ */
+static void
+defer (struct GNUNET_TESTBED_Operation *op)
+{
+ unsigned int i;
+
+ GNUNET_assert (OP_STATE_READY == op->state);
+ GNUNET_assert (GNUNET_SCHEDULER_NO_TASK != op->start_task_id);
+ GNUNET_SCHEDULER_cancel (op->start_task_id);
+ op->start_task_id = GNUNET_SCHEDULER_NO_TASK;
+ for (i = 0; i < op->nqueues; i++)
+ op->queues[i]->active--;
+ op->state = OP_STATE_WAITING;
+}
+
+
+/**
* Create an 'operation' to be performed.
*
* @param cls closure for the callbacks
@@ -260,9 +280,19 @@
struct QueueEntry *entry;
queue->max_active = max_active;
- if (queue->active >= queue->max_active)
- return;
+ /* if (queue->active >= queue->max_active) */
+ /* return; */
+
entry = queue->head;
+ while ( (queue->active > queue->max_active) &&
+ (NULL != entry))
+ {
+ if (entry->op->state == OP_STATE_READY)
+ defer (entry->op);
+ entry = entry->next;
+ }
+
+ entry = queue->head;
while ( (NULL != entry) &&
(queue->active < queue->max_active) )
{
@@ -336,10 +366,16 @@
if (entry->op == operation)
break;
GNUNET_assert (NULL != entry);
- if (OP_STATE_STARTED == operation->state)
+ switch (operation->state)
{
+ case OP_STATE_INIT:
+ case OP_STATE_WAITING:
+ break;
+ case OP_STATE_READY:
+ case OP_STATE_STARTED:
GNUNET_assert (0 != queue->active);
queue->active--;
+ break;
}
entry2 = entry->next;
GNUNET_CONTAINER_DLL_remove (queue->head, queue->tail, entry);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r25669 - gnunet/src/testbed,
gnunet <=