Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
rename TimeoutFailureException to TimeoutException
[simgrid.git] / src / simix / smx_global.c
index 2c09bb6..dffafbe 100644 (file)
@@ -135,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
@@ -267,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();
 }
@@ -277,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();
 }
@@ -409,13 +427,17 @@ double SIMIX_solve(xbt_fifo_t actions_done, xbt_fifo_t actions_failed)
       while ((action = xbt_swag_extract(model->states.failed_action_set))) {
         smx_action = action->data;
         if (smx_action) {
-          xbt_fifo_unshift(actions_failed, smx_action);
+          SIMIX_action_signal_all(smx_action);
         }
       }
       while ((action = xbt_swag_extract(model->states.done_action_set))) {
         smx_action = action->data;
         if (smx_action) {
-          xbt_fifo_unshift(actions_done, 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)
+            SIMIX_network_copy_data((smx_comm_t)smx_action->data);
+          SIMIX_action_signal_all(smx_action);      
         }
       }
     }
@@ -450,12 +472,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);
 }
@@ -467,7 +489,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");
@@ -482,7 +504,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");
@@ -497,7 +519,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;
 }