Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix memleaks when exiting early (e.g. with --help or --version).
[simgrid.git] / src / simix / smx_global.cpp
index 108ba80..b463c5a 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
@@ -212,7 +212,7 @@ void SIMIX_global_init(int *argc, char **argv)
     sg_platf_init();
     simgrid::s4u::on_platform_created.connect(surf_presolve);
 
-    simgrid::s4u::Storage::on_creation.connect([](simgrid::s4u::Storage& storage) {
+    simgrid::s4u::Storage::on_creation.connect([](simgrid::s4u::Storage const& storage) {
       sg_storage_t s = simgrid::s4u::Storage::by_name(storage.get_name());
       xbt_assert(s != nullptr, "Storage not found for name %s", storage.get_cname());
     });
@@ -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;
@@ -569,6 +566,11 @@ void SIMIX_display_process_status()
     if (process->waiting_synchro) {
 
       const char* synchro_description = "unknown";
+      // we don't care about the Activity type to get its name, use RawImpl
+      const char* name =
+          boost::static_pointer_cast<simgrid::kernel::activity::ActivityImpl_T<simgrid::kernel::activity::RawImpl>>(
+              process->waiting_synchro)
+              ->get_cname();
 
       if (boost::dynamic_pointer_cast<simgrid::kernel::activity::ExecImpl>(process->waiting_synchro) != nullptr)
         synchro_description = "execution";
@@ -587,8 +589,7 @@ void SIMIX_display_process_status()
 
       XBT_INFO("Process %ld (%s@%s): waiting for %s synchro %p (%s) in state %d to finish", process->get_pid(),
                process->get_cname(), process->get_host()->get_cname(), synchro_description,
-               process->waiting_synchro.get(), process->waiting_synchro->get_cname(),
-               (int)process->waiting_synchro->state_);
+               process->waiting_synchro.get(), name, (int)process->waiting_synchro->state_);
     }
     else {
       XBT_INFO("Process %ld (%s@%s)", process->get_pid(), process->get_cname(), process->get_host()->get_cname());