Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Move MC-related out of simix and into mc where it belongs
[simgrid.git] / src / simix / smx_global.c
index d78fe0e..0404d17 100644 (file)
@@ -5,6 +5,11 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include <stdlib.h>
+#include "src/portable.h"
+#ifdef HAVE_SYS_PTRACE_H
+# include <sys/types.h>
+# include <sys/ptrace.h>
+#endif
 
 #include "smx_private.h"
 #include "xbt/heap.h"
 #include "xbt/str.h"
 #include "xbt/ex.h"             /* ex_backtrace_display */
 #include "mc/mc.h"
-#include "mc/mc_replay.h"
+#include "src/mc/mc_replay.h"
 #include "simgrid/sg_config.h"
 
 #ifdef HAVE_MC
-#include "mc/mc_private.h"
-#include "mc/mc_protocol.h"
-#include "mc/mc_client.h"
+#include "src/mc/mc_private.h"
+#include "src/mc/mc_protocol.h"
+#include "src/mc/mc_client.h"
 #endif
-#include "mc/mc_record.h"
+
+#ifdef HAVE_MC
+#include <stdlib.h>
+#include "src/mc/mc_protocol.h"
+#endif 
+
+#include "src/mc/mc_record.h"
 
 #ifdef HAVE_SMPI
-#include "smpi/private.h"
+#include "src/smpi/private.h"
 #endif
 
 XBT_LOG_NEW_CATEGORY(simix, "All SIMIX categories");
@@ -81,14 +92,6 @@ static void _XBT_CALL segvhandler(int signum, siginfo_t *siginfo, void *context)
     }
 #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);
 }
 
@@ -151,6 +154,10 @@ XBT_INLINE double SIMIX_timer_next(void)
  */
 void SIMIX_global_init(int *argc, char **argv)
 {
+#ifdef HAVE_MC
+  _sg_do_model_check = getenv(MC_ENV_VARIABLE) != NULL;
+#endif
+
   s_smx_process_t proc;
 
   if (!simix_global) {
@@ -214,20 +221,14 @@ void SIMIX_global_init(int *argc, char **argv)
 #ifdef HAVE_MC
   // The communication initialization is done ASAP.
   // We need to communicate  initialization of the different layers to the model-checker.
-  if (mc_mode == MC_MODE_NONE) {
-    if (getenv(MC_ENV_SOCKET_FD)) {
-      mc_mode = MC_MODE_CLIENT;
-      MC_client_init();
-      MC_client_hello();
-      MC_client_handle_messages();
-    }
-  }
+  MC_client_init();
 #endif
 
   if (_sg_cfg_exit_asap)
     exit(0);
 }
 
+int smx_cleaned = 0;
 /**
  * \ingroup SIMIX_API
  * \brief Clean the SIMIX simulation
@@ -236,12 +237,11 @@ void SIMIX_global_init(int *argc, char **argv)
  */
 void SIMIX_clean(void)
 {
-  static int cleaned = 0;
 #ifdef TIME_BENCH_PER_SR
   smx_ctx_raw_new_sr();
 #endif
-  if (cleaned) return; // to avoid double cleaning by java and C
-  cleaned = 1;
+  if (smx_cleaned) return; // to avoid double cleaning by java and C
+  smx_cleaned = 1;
   XBT_DEBUG("SIMIX_clean called. Simulation's over.");
   if (!xbt_dynar_is_empty(simix_global->process_to_run) && SIMIX_get_clock() == 0.0) {
          XBT_CRITICAL("   ");
@@ -636,12 +636,12 @@ void SIMIX_display_process_status(void)
         break;
       }
       XBT_INFO("Process %lu (%s@%s): waiting for %s synchro %p (%s) in state %d to finish",
-          process->pid, process->name, sg_host_name(process->host),
+          process->pid, process->name, sg_host_get_name(process->host),
           synchro_description, process->waiting_synchro,
           process->waiting_synchro->name, (int)process->waiting_synchro->state);
     }
     else {
-      XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_name(process->host));
+      XBT_INFO("Process %lu (%s@%s)", process->pid, process->name, sg_host_get_name(process->host));
     }
   }
 }