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
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 */
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;
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 */
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
simdata->comm = NULL;
simdata->compute = NULL;
#ifdef HAVE_TRACING
MSG_RETURN(MSG_HOST_FAILURE);
} else {
/* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */
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
simdata->comm = NULL;
simdata->compute = NULL;
#ifdef HAVE_TRACING
MSG_error_t MSG_parallel_task_execute(m_task_t task)
{
simdata_task_t simdata = NULL;
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();
m_process_t self = MSG_process_self();
CHECK_HOST();
DEBUG1("Parallel execution action created: %p", simdata->compute);
self->simdata->waiting_action = simdata->compute;
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;
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);
- 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 */
/* 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 */
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 */
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);
simdata->comm = NULL;
simdata->compute = NULL;
MSG_RETURN(MSG_TASK_CANCELLED);
req->host_execution_wait.result = action->state;
SIMIX_request_answer(req);
}
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)
}
void SIMIX_post_host_execute(smx_action_t action)
- * \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
*/
*
* \param execution The execution action
*/
SIMIX_req_set_category (action, TRACE_internal_smpi_get_category());
#endif
SIMIX_req_host_execution_wait(action);
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)
}
static void smpi_execute(double duration)