Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
proper use of the HAVE_TRACING variable defined by Cmake through -Dtracing=on
[simgrid.git] / src / msg / gos.c
index b61e499..f656ec4 100644 (file)
@@ -42,11 +42,14 @@ MSG_error_t MSG_task_execute(m_task_t task)
   m_process_t self = MSG_process_self();
   e_surf_action_state_t state = SURF_ACTION_NOT_IN_THE_SYSTEM;
   CHECK_HOST();
+#ifdef HAVE_TRACING
+  TRACE_msg_task_execute_start (task);
+#endif
 
   simdata = task->simdata;
-  xbt_assert0((!simdata->compute)
-              && (task->simdata->refcount == 1),
-              "This task is executed somewhere else. Go fix your code!");
+
+  xbt_assert1((!simdata->compute) && (task->simdata->refcount == 1),
+              "This task is executed somewhere else. Go fix your code! %d", task->simdata->refcount);
 
   DEBUG1("Computing on %s", MSG_process_self()->simdata->m_host->name);
 
@@ -57,14 +60,15 @@ MSG_error_t MSG_task_execute(m_task_t task)
                          simdata->computation_amount);
   SIMIX_action_set_priority(simdata->compute, simdata->priority);
 
-  self->simdata->waiting_task = task;
+  /* changed to waiting action since we are always waiting one action (execute, communicate or sleep) */
+  self->simdata->waiting_action = simdata->compute;
   SIMIX_register_action_to_condition(simdata->compute, simdata->cond);
   do {
     SIMIX_cond_wait(simdata->cond, simdata->mutex);
     state = SIMIX_action_get_state(simdata->compute);
   } while (state == SURF_ACTION_READY || state == SURF_ACTION_RUNNING);
   SIMIX_unregister_action_to_condition(simdata->compute, simdata->cond);
-  self->simdata->waiting_task = NULL;
+  self->simdata->waiting_action = NULL;
 
   SIMIX_mutex_unlock(simdata->mutex);
   simdata->refcount--;
@@ -75,18 +79,27 @@ MSG_error_t MSG_task_execute(m_task_t task)
     simdata->computation_amount = 0.0;
     simdata->comm = NULL;
     simdata->compute = NULL;
+#ifdef HAVE_TRACING
+    TRACE_msg_task_execute_end (task);
+#endif
     MSG_RETURN(MSG_OK);
   } else if (SIMIX_host_get_state(SIMIX_host_self()) == 0) {
     /* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */
     SIMIX_action_destroy(task->simdata->compute);
     simdata->comm = NULL;
     simdata->compute = NULL;
+#ifdef HAVE_TRACING
+    TRACE_msg_task_execute_end (task);
+#endif
     MSG_RETURN(MSG_HOST_FAILURE);
   } else {
     /* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */
     SIMIX_action_destroy(task->simdata->compute);
     simdata->comm = NULL;
     simdata->compute = NULL;
+#ifdef HAVE_TRACING
+    TRACE_msg_task_execute_end (task);
+#endif
     MSG_RETURN(MSG_TASK_CANCELLED);
   }
 }
@@ -174,7 +187,7 @@ MSG_error_t MSG_parallel_task_execute(m_task_t task)
                                   simdata->host_list, simdata->comp_amount,
                                   simdata->comm_amount, 1.0, -1.0);
 
-  self->simdata->waiting_task = task;
+  self->simdata->waiting_action = simdata->compute;
   SIMIX_register_action_to_condition(simdata->compute, simdata->cond);
   do {
     SIMIX_cond_wait(simdata->cond, simdata->mutex);
@@ -182,7 +195,7 @@ MSG_error_t MSG_parallel_task_execute(m_task_t task)
   } while (state == SURF_ACTION_READY || state == SURF_ACTION_RUNNING);
 
   SIMIX_unregister_action_to_condition(simdata->compute, simdata->cond);
-  self->simdata->waiting_task = NULL;
+  self->simdata->waiting_action = NULL;
 
 
   SIMIX_mutex_unlock(simdata->mutex);
@@ -227,6 +240,10 @@ MSG_error_t MSG_process_sleep(double nb_sec)
   smx_mutex_t mutex;
   smx_cond_t cond;
 
+#ifdef HAVE_TRACING
+  TRACE_msg_process_sleep_in (MSG_process_self());
+#endif
+
   /* create action to sleep */
   act_sleep =
     SIMIX_action_sleep(SIMIX_process_get_host(proc->simdata->s_process),
@@ -238,11 +255,13 @@ MSG_error_t MSG_process_sleep(double nb_sec)
   /* create conditional and register action to it */
   cond = SIMIX_cond_init();
 
+  proc->simdata->waiting_action = act_sleep;
   SIMIX_register_action_to_condition(act_sleep, cond);
   do {
     SIMIX_cond_wait(cond, mutex);
     state = SIMIX_action_get_state(act_sleep);
   } while (state == SURF_ACTION_READY || state == SURF_ACTION_RUNNING);
+  proc->simdata->waiting_action = NULL;
   SIMIX_unregister_action_to_condition(act_sleep, cond);
   SIMIX_mutex_unlock(mutex);
 
@@ -253,29 +272,26 @@ MSG_error_t MSG_process_sleep(double nb_sec)
   if (SIMIX_action_get_state(act_sleep) == SURF_ACTION_DONE) {
     if (SIMIX_host_get_state(SIMIX_host_self()) == SURF_RESOURCE_OFF) {
       SIMIX_action_destroy(act_sleep);
+#ifdef HAVE_TRACING
+      TRACE_msg_process_sleep_out (MSG_process_self());
+#endif
       MSG_RETURN(MSG_HOST_FAILURE);
     }
   } else {
     SIMIX_action_destroy(act_sleep);
+#ifdef HAVE_TRACING
+    TRACE_msg_process_sleep_out (MSG_process_self());
+#endif
     MSG_RETURN(MSG_HOST_FAILURE);
   }
 
   SIMIX_action_destroy(act_sleep);
+#ifdef HAVE_TRACING
+  TRACE_msg_process_sleep_out (MSG_process_self());
+#endif
   MSG_RETURN(MSG_OK);
 }
 
-/** \ingroup msg_gos_functions
- * \brief Return the number of MSG tasks currently running on
- * the host of the current running process.
- */
-static int MSG_get_msgload(void)
-{
-  xbt_die("not implemented yet");
-  return 0;
-}
-
-
-
 /** \ingroup msg_gos_functions
  * \brief Listen on \a channel and waits for receiving a task from \a host.
  *