From 25001f5d08a23c1094eacb4c5e8368bf07074167 Mon Sep 17 00:00:00 2001 From: thiery Date: Mon, 26 Jun 2006 14:04:11 +0000 Subject: [PATCH] Fix SD_simulate return value git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2434 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- examples/simdag/sd_test.c | 20 +++++++++++++++++++- src/simdag/sd_global.c | 17 ++++++++++++----- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/examples/simdag/sd_test.c b/examples/simdag/sd_test.c index f4719f119e..0d901b40b1 100644 --- a/examples/simdag/sd_test.c +++ b/examples/simdag/sd_test.c @@ -92,7 +92,25 @@ int main(int argc, char **argv) { computation_amount, communication_amount, rate); printf("Launching simulation...\n"); - SD_simulate(100); + SD_task_t *changed_tasks = SD_simulate(100); + int i = 0; + + printf("Simulation results:\n"); + while(changed_tasks[i] != NULL) { + switch (SD_task_get_state(changed_tasks[i])) { + case SD_DONE: + printf("%s is done.\n", SD_task_get_name(changed_tasks[i])); + break; + case SD_FAILED: + printf("%s is failed.\n", SD_task_get_name(changed_tasks[i])); + break; + default: + printf("Unknown status for %s\n", SD_task_get_name(changed_tasks[i])); + break; + } + i++; + } + free(changed_tasks); SD_task_destroy(taskA); SD_task_destroy(taskB); diff --git a/src/simdag/sd_global.c b/src/simdag/sd_global.c index 262dbab38f..b0206eb4ee 100644 --- a/src/simdag/sd_global.c +++ b/src/simdag/sd_global.c @@ -72,12 +72,13 @@ SD_task_t* SD_simulate(double how_long) double elapsed_time = 0.0; SD_task_t task; surf_action_t action; + SD_task_t *changed_tasks = NULL; + int changed_task_number = 0; + int changed_task_capacity = 16; /* create the array that will be returned */ - const int task_number = xbt_swag_size(sd_global->scheduled_task_set) + xbt_swag_size(sd_global->running_task_set); - SD_task_t *changed_tasks = xbt_new0(SD_task_t, task_number + 1); - changed_tasks[task_number] = NULL; - int changed_task_number = 0; + changed_tasks = xbt_new0(SD_task_t, changed_task_capacity); /* changed_task_capacity will be increased if necessary */ + changed_tasks[0] = NULL; surf_solve(); /* Takes traces into account. Returns 0.0 */ @@ -95,7 +96,13 @@ SD_task_t* SD_simulate(double how_long) action = __SD_task_run(task); surf_workstation_resource->common_public->action_set_data(action, task); task->state_changed = 1; - changed_tasks[changed_task_number++] = task; + + changed_tasks[changed_task_number++] = task; /* replace NULL by the task */ + if (changed_task_number == changed_task_capacity) { + changed_task_capacity *= 2; + changed_tasks = xbt_realloc(changed_tasks, sizeof(SD_task_t) * changed_task_capacity); + } + changed_tasks[changed_task_number] = NULL; } else { INFO1("Cannot execute task '%s' now because some depencies are not satisfied.", SD_task_get_name(task)); -- 2.20.1