From e2b930ee430830d0be797be083a0bdd124778e7f Mon Sep 17 00:00:00 2001 From: cristianrosa Date: Thu, 27 Jan 2011 13:59:28 +0000 Subject: [PATCH] Make SIMIX_req_host_execution_wait to also destroy the execution action when done. This avoids a subsequent request just to destroy it. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9520 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/msg/gos.c | 13 ++++--------- src/simix/smx_host.c | 3 +++ src/simix/smx_user.c | 2 +- src/smpi/smpi_bench.c | 1 - 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/msg/gos.c b/src/msg/gos.c index 46124d84d0..ace7cc7410 100644 --- a/src/msg/gos.c +++ b/src/msg/gos.c @@ -80,7 +80,6 @@ MSG_error_t MSG_task_execute(m_task_t task) DEBUG2("Execution task '%s' finished in state %d", task->name, comp_state); if (comp_state == SIMIX_DONE) { /* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */ - SIMIX_req_host_execution_destroy(task->simdata->compute); simdata->computation_amount = 0.0; simdata->comm = NULL; simdata->compute = NULL; @@ -90,7 +89,6 @@ MSG_error_t MSG_task_execute(m_task_t task) MSG_RETURN(MSG_OK); } else if (SIMIX_req_host_get_state(SIMIX_host_self()) == 0) { /* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */ - SIMIX_req_host_execution_destroy(task->simdata->compute); simdata->comm = NULL; simdata->compute = NULL; #ifdef HAVE_TRACING @@ -99,7 +97,6 @@ MSG_error_t MSG_task_execute(m_task_t task) MSG_RETURN(MSG_HOST_FAILURE); } else { /* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */ - SIMIX_req_host_execution_destroy(task->simdata->compute); simdata->comm = NULL; simdata->compute = NULL; #ifdef HAVE_TRACING @@ -168,6 +165,7 @@ MSG_parallel_task_create(const char *name, int host_nb, MSG_error_t MSG_parallel_task_execute(m_task_t task) { simdata_task_t simdata = NULL; + e_smx_state_t comp_state; m_process_t self = MSG_process_self(); CHECK_HOST(); @@ -192,29 +190,26 @@ MSG_error_t MSG_parallel_task_execute(m_task_t task) DEBUG1("Parallel execution action created: %p", simdata->compute); self->simdata->waiting_action = simdata->compute; - SIMIX_req_host_execution_wait(simdata->compute); + comp_state = SIMIX_req_host_execution_wait(simdata->compute); self->simdata->waiting_action = NULL; - DEBUG2("Finished waiting for execution of action %p, state = %d", simdata->compute, SIMIX_req_host_execution_get_state(task->simdata->compute)); + DEBUG2("Finished waiting for execution of action %p, state = %d", simdata->compute, comp_state); simdata->isused=0; - if (SIMIX_req_host_execution_get_state(task->simdata->compute) == SIMIX_DONE) { + if (comp_state == SIMIX_DONE) { /* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */ - SIMIX_req_host_execution_destroy(task->simdata->compute); simdata->computation_amount = 0.0; simdata->comm = NULL; simdata->compute = NULL; MSG_RETURN(MSG_OK); } else if (SIMIX_req_host_get_state(SIMIX_host_self()) == 0) { /* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */ - SIMIX_req_host_execution_destroy(task->simdata->compute); simdata->comm = NULL; simdata->compute = NULL; MSG_RETURN(MSG_HOST_FAILURE); } else { /* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */ - SIMIX_req_host_execution_destroy(task->simdata->compute); simdata->comm = NULL; simdata->compute = NULL; MSG_RETURN(MSG_TASK_CANCELLED); diff --git a/src/simix/smx_host.c b/src/simix/smx_host.c index 13b216acac..de979ccc90 100644 --- a/src/simix/smx_host.c +++ b/src/simix/smx_host.c @@ -374,6 +374,9 @@ void SIMIX_execution_finish(smx_action_t action) req->host_execution_wait.result = action->state; SIMIX_request_answer(req); } + + /* We no longer need it */ + SIMIX_host_execution_destroy(action); } void SIMIX_post_host_execute(smx_action_t action) diff --git a/src/simix/smx_user.c b/src/simix/smx_user.c index 91921efae9..033d4cabdf 100644 --- a/src/simix/smx_user.c +++ b/src/simix/smx_user.c @@ -279,7 +279,7 @@ void SIMIX_req_host_execution_set_priority(smx_action_t execution, double priori } /** - * \brief Waits for the completion of an execution action. + * \brief Waits for the completion of an execution action and destroy it. * * \param execution The execution action */ diff --git a/src/smpi/smpi_bench.c b/src/smpi/smpi_bench.c index ae6c88c05a..ed6e7c07ef 100644 --- a/src/smpi/smpi_bench.c +++ b/src/smpi/smpi_bench.c @@ -53,7 +53,6 @@ static void smpi_execute_flops(double flops) SIMIX_req_set_category (action, TRACE_internal_smpi_get_category()); #endif SIMIX_req_host_execution_wait(action); - SIMIX_req_host_execution_destroy(action); } static void smpi_execute(double duration) -- 2.20.1