Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
obey our naming conventions
[simgrid.git] / src / simix / smx_global.cpp
index 598882c..a3623c1 100644 (file)
@@ -13,7 +13,8 @@
 
 #include <xbt/functional.hpp>
 
-#include <simgrid/s4u/host.hpp>
+#include "simgrid/s4u/engine.hpp"
+#include "simgrid/s4u/host.hpp"
 
 #include "src/surf/surf_interface.hpp"
 #include "src/surf/storage_interface.hpp"
 
 #if HAVE_MC
 #include "src/mc/mc_private.h"
-#include "src/mc/mc_protocol.h"
-#include "src/mc/Client.hpp"
-
+#include "src/mc/remote/Client.hpp"
+#include "src/mc/remote/mc_protocol.h"
 #include <stdlib.h>
-#include "src/mc/mc_protocol.h"
 #endif 
 
 #include "src/mc/mc_record.h"
@@ -208,7 +207,6 @@ void SIMIX_global_init(int *argc, char **argv)
     simgrid::simix::ActorImpl proc;
     simix_global->process_to_run = xbt_dynar_new(sizeof(smx_actor_t), nullptr);
     simix_global->process_that_ran = xbt_dynar_new(sizeof(smx_actor_t), nullptr);
-    simix_global->process_list = xbt_swag_new(xbt_swag_offset(proc, process_hookup));
     simix_global->process_to_destroy = xbt_swag_new(xbt_swag_offset(proc, destroy_hookup));
     simix_global->maestro_process = nullptr;
     simix_global->create_process_function = &SIMIX_process_create;
@@ -231,13 +229,13 @@ void SIMIX_global_init(int *argc, char **argv)
 #endif
     /* register a function to be called by SURF after the environment creation */
     sg_platf_init();
-    simgrid::surf::on_postparse.connect(SIMIX_post_create_environment);
+    simgrid::s4u::onPlatformCreated.connect(SIMIX_post_create_environment);
     simgrid::s4u::Host::onCreation.connect([](simgrid::s4u::Host& host) {
       host.extension_set<simgrid::simix::Host>(new simgrid::simix::Host());
     });
 
     simgrid::surf::storageCreatedCallbacks.connect([](simgrid::surf::Storage* storage) {
-      const char* name = storage->getName();
+      const char* name = storage->cname();
       // TODO, create sg_storage_by_name
       sg_storage_t s = xbt_lib_get_elm_or_null(storage_lib, name);
       xbt_assert(s != nullptr, "Storage not found for name %s", name);
@@ -302,8 +300,7 @@ void SIMIX_clean()
   xbt_dynar_free(&simix_global->process_to_run);
   xbt_dynar_free(&simix_global->process_that_ran);
   xbt_swag_free(simix_global->process_to_destroy);
-  xbt_swag_free(simix_global->process_list);
-  simix_global->process_list = nullptr;
+  simix_global->process_list.clear();
   simix_global->process_to_destroy = nullptr;
 
   xbt_os_mutex_destroy(simix_global->mutex);
@@ -432,7 +429,6 @@ void SIMIX_run()
   }
 
   double time = 0;
-  smx_actor_t process;
 
   do {
     XBT_DEBUG("New Schedule Round; size(queue)=%lu", xbt_dynar_length(simix_global->process_to_run));
@@ -504,6 +500,7 @@ void SIMIX_run()
        */
 
       unsigned int iter;
+      smx_actor_t process;
       xbt_dynar_foreach(simix_global->process_that_ran, iter, process) {
         if (process->simcall.call != SIMCALL_NONE) {
           SIMIX_simcall_handle(&process->simcall, 0);
@@ -518,7 +515,7 @@ void SIMIX_run()
     }
 
     time = SIMIX_timer_next();
-    if (time > -1.0 || xbt_swag_size(simix_global->process_list) != 0) {
+    if (time > -1.0 || simix_global->process_list.empty() == false) {
       XBT_DEBUG("Calling surf_solve");
       time = surf_solve(time);
       XBT_DEBUG("Moving time ahead : %g", time);
@@ -550,12 +547,12 @@ void SIMIX_run()
     XBT_DEBUG("### time %f, empty %d", time, xbt_dynar_is_empty(simix_global->process_to_run));
 
     if (xbt_dynar_is_empty(simix_global->process_to_run) &&
-        xbt_swag_size(simix_global->process_list) != 0)
+        !simix_global->process_list.empty())
     simgrid::simix::onDeadlock();
 
   } while (time > -1.0 || !xbt_dynar_is_empty(simix_global->process_to_run));
 
-  if (xbt_swag_size(simix_global->process_list) != 0) {
+  if (simix_global->process_list.size() != 0) {
 
     TRACE_end();
 
@@ -563,6 +560,7 @@ void SIMIX_run()
     SIMIX_display_process_status();
     xbt_abort();
   }
+  simgrid::s4u::onSimulationEnd();
 }
 
 /**
@@ -639,17 +637,13 @@ void SIMIX_function_register_process_cleanup(void_pfn_smxprocess_t function)
 
 void SIMIX_display_process_status()
 {
-  if (simix_global->process_list == nullptr) {
-    return;
-  }
-
-  smx_actor_t process = nullptr;
-  int nbprocess = xbt_swag_size(simix_global->process_list);
+  int nbprocess = simix_global->process_list.size();
 
   XBT_INFO("%d processes are still running, waiting for something.", nbprocess);
   /*  List the process and their state */
   XBT_INFO("Legend of the following listing: \"Process <pid> (<name>@<host>): <status>\"");
-  xbt_swag_foreach(process, simix_global->process_list) {
+  for (auto kv : simix_global->process_list) {
+    smx_actor_t process = kv.second;
 
     if (process->waiting_synchro) {