Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
get rid fo SIMIX_simcall_exit
[simgrid.git] / src / simix / smx_global.cpp
index 4a300d8..d47121d 100644 (file)
@@ -192,10 +192,10 @@ void SIMIX_global_init(int *argc, char **argv)
 #endif
 
   if (simix_global == nullptr) {
+    surf_init(argc, argv); /* Initialize SURF structures */
+
     simix_global.reset(new simgrid::simix::Global());
     simix_global->maestro_process = nullptr;
-
-    surf_init(argc, argv);      /* Initialize SURF structures */
     SIMIX_context_mod_init();
 
     // Either create a new context with maestro or create
@@ -220,9 +220,6 @@ void SIMIX_global_init(int *argc, char **argv)
 
   if (simgrid::config::get_value<bool>("clean-atexit"))
     atexit(SIMIX_clean);
-
-  if (_sg_cfg_exit_asap)
-    exit(0);
 }
 
 int smx_cleaned = 0;
@@ -316,15 +313,16 @@ static void SIMIX_wake_processes()
     XBT_DEBUG("Handling the processes whose action failed (if any)");
     while ((action = model->extract_failed_action())) {
       XBT_DEBUG("   Handling Action %p",action);
-      SIMIX_simcall_exit(static_cast<simgrid::kernel::activity::ActivityImpl*>(action->get_data()));
+      if (action->get_activity() != nullptr)
+        simgrid::kernel::activity::ActivityImplPtr(action->get_activity())->post();
     }
     XBT_DEBUG("Handling the processes whose action terminated normally (if any)");
     while ((action = model->extract_done_action())) {
       XBT_DEBUG("   Handling Action %p",action);
-      if (action->get_data() == nullptr)
+      if (action->get_activity() == nullptr)
         XBT_DEBUG("probably vcpu's action %p, skip", action);
       else
-        SIMIX_simcall_exit(static_cast<simgrid::kernel::activity::ActivityImpl*>(action->get_data()));
+        simgrid::kernel::activity::ActivityImplPtr(action->get_activity())->post();
     }
   }
 }