Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove the 'TUTORIAL: New API' chunks
[simgrid.git] / src / simix / smx_global.c
index eb21291..b9dedde 100644 (file)
 #include "mc/mc.h"
 #include "simgrid/sg_config.h"
 
+#ifdef HAVE_MC
+#include "mc/mc_private.h"
+#endif
+
+#ifdef HAVE_SMPI
+#include "smpi/private.h"
+#endif
+
 XBT_LOG_NEW_CATEGORY(simix, "All SIMIX categories");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_kernel, simix,
                                 "Logging specific to SIMIX (kernel)");
@@ -31,11 +39,11 @@ int _sg_do_verbose_exit = 1;
 static void _XBT_CALL inthandler(int ignored)
 {
   if ( _sg_do_verbose_exit ) {
-     XBT_INFO("CTRL-C pressed. Displaying status and bailing out");
+     XBT_INFO("CTRL-C pressed. The current status will be displayed before exit (disable that behavior with option 'verbose-exit').");
      SIMIX_display_process_status();
   }
   else {
-     XBT_INFO("CTRL-C pressed. bailing out without displaying because verbose-exit is disabled");
+     XBT_INFO("CTRL-C pressed, exiting. Hiding the current process status since 'verbose-exit' is set to false.");
   }
   exit(1);
 }
@@ -58,7 +66,23 @@ static void _XBT_CALL segvhandler(int signum, siginfo_t *siginfo, void *context)
               "siginfo = {si_signo = %d, si_errno = %d, si_code = %d, si_addr = %p}\n",
               siginfo->si_signo, siginfo->si_errno, siginfo->si_code, siginfo->si_addr);
     }
+  } else  if (siginfo->si_signo == SIGSEGV) {
+    fprintf(stderr, "Segmentation fault.\n");
+#ifdef HAVE_SMPI
+    if (smpi_enabled() && !smpi_privatize_global_variables) {
+      fprintf(stderr,
+        "Try to enable SMPI variable privatization with --cfg=smpi/privatize_global_variables:yes.\n");
+    }
+#endif
   }
+#ifdef HAVE_MC
+  if (MC_is_active()) {
+    if (mc_stack) {
+      MC_dump_stack_safety(mc_stack);
+    }
+    MC_print_statistics(mc_stats);
+  }
+#endif
   raise(signum);
 }
 
@@ -370,7 +394,7 @@ void SIMIX_run(void)
 
       xbt_dynar_foreach(simix_global->process_that_ran, iter, process) {
         if (process->simcall.call != SIMCALL_NONE) {
-          SIMIX_simcall_pre(&process->simcall, 0);
+          SIMIX_simcall_enter(&process->simcall, 0);
         }
       }
     }
@@ -396,13 +420,13 @@ void SIMIX_run(void)
     /* Wake up all processes waiting for a Surf action to finish */
     xbt_dynar_foreach(model_list, iter, model) {
       while ((action = surf_model_extract_failed_action_set(model)))
-        SIMIX_simcall_post((smx_action_t) surf_action_get_data(action));
+        SIMIX_simcall_exit((smx_action_t) surf_action_get_data(action));
 
       while ((action = surf_model_extract_done_action_set(model)))
         if (surf_action_get_data(action) == NULL)
           XBT_DEBUG("probably vcpu's action %p, skip", action);
         else
-          SIMIX_simcall_post((smx_action_t) surf_action_get_data(action));
+          SIMIX_simcall_exit((smx_action_t) surf_action_get_data(action));
     }
 
     /* Autorestart all process */
@@ -420,8 +444,6 @@ void SIMIX_run(void)
 
 
     XBT_DEBUG("### time %f, empty %d", time, xbt_dynar_is_empty(simix_global->process_to_run));
-    // !(time == -1.0 && xbt_dynar_is_empty())
-
 
   } while (time != -1.0 || !xbt_dynar_is_empty(simix_global->process_to_run));
 
@@ -545,13 +567,6 @@ void SIMIX_display_process_status(void)
 
       case SIMIX_ACTION_IO:
         action_description = "I/O";
-        break;
-      /* **************************************/
-      /* TUTORIAL: New API                    */
-      case SIMIX_ACTION_NEW_API:
-        action_description = "NEW API";
-      /* **************************************/
-
         break;
       }
       XBT_INFO("Process %lu (%s@%s): waiting for %s action %p (%s) in state %d to finish",