Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make SIMIX_req_host_execution_wait to also destroy the execution action when done.
authorcristianrosa <cristianrosa@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 27 Jan 2011 13:59:28 +0000 (13:59 +0000)
committercristianrosa <cristianrosa@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 27 Jan 2011 13:59:28 +0000 (13:59 +0000)
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
src/simix/smx_host.c
src/simix/smx_user.c
src/smpi/smpi_bench.c

index 46124d8..ace7cc7 100644 (file)
@@ -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 */
   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;
@@ -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 */
     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
@@ -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 */
     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
@@ -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;
 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();
 
@@ -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;
   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);
 
   simdata->isused=0;
 
 
   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 */
     /* 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);
index 13b216a..de979cc 100644 (file)
@@ -374,6 +374,9 @@ void SIMIX_execution_finish(smx_action_t action)
     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)
index 91921ef..033d4ca 100644 (file)
@@ -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
  */
  *
  * \param execution The execution action
  */
index ae6c88c..ed6e7c0 100644 (file)
@@ -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_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)