Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Sanitize the includes of context objects declarations (was dupplicated and a bit...
[simgrid.git] / src / simix / smx_global.c
index 9df8f76..d747459 100644 (file)
@@ -19,7 +19,6 @@ XBT_LOG_EXTERNAL_CATEGORY(simix_host);
 XBT_LOG_EXTERNAL_CATEGORY(simix_process);
 XBT_LOG_EXTERNAL_CATEGORY(simix_synchro);
 XBT_LOG_EXTERNAL_CATEGORY(simix_context);
-XBT_LOG_EXTERNAL_CATEGORY(simix_network);
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix,
                                 "Logging specific to SIMIX (kernel)");
 
@@ -58,7 +57,6 @@ void SIMIX_global_init(int *argc, char **argv)
     XBT_LOG_CONNECT(simix_process, simix);
     XBT_LOG_CONNECT(simix_synchro, simix);
     XBT_LOG_CONNECT(simix_context, simix);
-    XBT_LOG_CONNECT(simix_network, simix);
 
     simix_global = xbt_new0(s_SIMIX_Global_t, 1);
 
@@ -137,6 +135,24 @@ void SIMIX_display_process_status(void)
         free(who);
         who = who2;
       }
+    } else if (process->sem) {
+      who2 =
+        bprintf
+        ("%s Blocked on semaphore %p; Waiting for the following actions:",
+         who,
+         (XBT_LOG_ISENABLED(simix_kernel, xbt_log_priority_verbose)) ?
+         process->sem : (void *) 0xdead);
+      free(who);
+      who = who2;
+      xbt_fifo_foreach(process->sem->actions, item, act, smx_action_t) {
+        who2 =
+          bprintf("%s '%s'(%p)", who, act->name,
+                  (XBT_LOG_ISENABLED(simix_kernel, xbt_log_priority_verbose))
+                  ? act : (void *) 0xdead);
+        free(who);
+        who = who2;
+      }
+
     } else {
       who2 =
         bprintf
@@ -269,7 +285,7 @@ void SIMIX_clean(void)
  *
  * \return Return the clock.
  */
-double SIMIX_get_clock(void)
+XBT_INLINE double SIMIX_get_clock(void)
 {
   return surf_get_clock();
 }
@@ -279,7 +295,7 @@ double SIMIX_get_clock(void)
  *
  *      Must be called before the first call to SIMIX_solve()
  */
-void SIMIX_init(void)
+XBT_INLINE void SIMIX_init(void)
 {
   surf_presolve();
 }
@@ -305,6 +321,7 @@ double SIMIX_solve(xbt_fifo_t actions_done, xbt_fifo_t actions_failed)
   if (xbt_swag_size(simix_global->process_to_run) && (elapsed_time > 0)) {
     DEBUG0("**************************************************");
   }
+  DEBUG1("%d processes in the to_run list",xbt_swag_size(simix_global->process_to_run));
 
   while ((process = xbt_swag_extract(simix_global->process_to_run))) {
     DEBUG2("Scheduling %s on %s", process->name, process->smx_host->name);
@@ -354,14 +371,14 @@ double SIMIX_solve(xbt_fifo_t actions_done, xbt_fifo_t actions_failed)
           xbt_free(args);
           continue;
         }
+
         if (args->kill_time > SIMIX_get_clock()) {
           surf_timer_model->extension.timer.set(args->kill_time, (void *)
                                                 &SIMIX_process_kill,
                                                 (void *) process);
         }
         xbt_free(args);
-      }
-      if (fun == simix_global->create_process_function) {
+      } else if (fun == simix_global->create_process_function) {
         smx_process_arg_t args = arg;
         DEBUG2("Launching %s on %s", args->name, args->hostname);
         process =
@@ -387,15 +404,15 @@ double SIMIX_solve(xbt_fifo_t actions_done, xbt_fifo_t actions_failed)
                                                   (void *) process);
         }
         xbt_free(args);
-      }
-      if (fun == SIMIX_process_kill) {
+      } else if (fun == SIMIX_process_kill) {
         process = arg;
         DEBUG2("Killing %s on %s", process->name, process->smx_host->name);
         SIMIX_process_kill(process);
-      }
-      if (fun == simix_global->kill_process_function) {
+      } else if (fun == simix_global->kill_process_function) {
         process = arg;
         (*simix_global->kill_process_function) (process);
+      } else {
+        THROW_IMPOSSIBLE;
       }
     }
 
@@ -419,10 +436,8 @@ double SIMIX_solve(xbt_fifo_t actions_done, xbt_fifo_t actions_failed)
         if (smx_action) {
           /* Copy the transfered data of the completed communication actions */
           /* FIXME: find a better way to determine if its a comm action */
-          if(smx_action->data != NULL) {
-            CDEBUG1(simix_network,"Communication %p finished",smx_action->data);
+          if(smx_action->data != NULL)
             SIMIX_network_copy_data((smx_comm_t)smx_action->data);
-          }
           SIMIX_action_signal_all(smx_action);      
         }
       }
@@ -458,12 +473,12 @@ double SIMIX_solve(xbt_fifo_t actions_done, xbt_fifo_t actions_failed)
  *     \param arg Parameters of the function
  *
  */
-void SIMIX_timer_set(double date, void *function, void *arg)
+XBT_INLINE void SIMIX_timer_set(double date, void *function, void *arg)
 {
   surf_timer_model->extension.timer.set(date, function, arg);
 }
 
-int SIMIX_timer_get(void **function, void **arg)
+XBT_INLINE int SIMIX_timer_get(void **function, void **arg)
 {
   return surf_timer_model->extension.timer.get(function, arg);
 }
@@ -475,7 +490,7 @@ int SIMIX_timer_get(void **function, void **arg)
  *     \param function Create process function
  *
  */
-void SIMIX_function_register_process_create(smx_creation_func_t function)
+XBT_INLINE void SIMIX_function_register_process_create(smx_creation_func_t function)
 {
   xbt_assert0((simix_global->create_process_function == NULL),
               "Data already set");
@@ -490,7 +505,7 @@ void SIMIX_function_register_process_create(smx_creation_func_t function)
  *     \param function Kill process function
  *
  */
-void SIMIX_function_register_process_kill(void_f_pvoid_t function)
+XBT_INLINE void SIMIX_function_register_process_kill(void_f_pvoid_t function)
 {
   xbt_assert0((simix_global->kill_process_function == NULL),
               "Data already set");
@@ -505,7 +520,7 @@ void SIMIX_function_register_process_kill(void_f_pvoid_t function)
  *     \param function cleanup process function
  *
  */
-void SIMIX_function_register_process_cleanup(void_f_pvoid_t function)
+XBT_INLINE void SIMIX_function_register_process_cleanup(void_f_pvoid_t function)
 {
   simix_global->cleanup_process_function = function;
 }