Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
try to reduce calls to get_instance and plug some leaks
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Mon, 20 Sep 2021 08:15:20 +0000 (10:15 +0200)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Mon, 20 Sep 2021 08:15:20 +0000 (10:15 +0200)
include/simgrid/s4u/Engine.hpp
src/smpi/internals/smpi_global.cpp
src/surf/sg_platf.cpp

index 4e571bb..83f92bb 100644 (file)
@@ -173,6 +173,8 @@ public:
     return res;
   }
 
+  kernel::EngineImpl* get_impl() const { return pimpl; }
+
   /** Returns whether SimGrid was initialized yet -- mostly for internal use */
   static bool is_initialized();
   /** @brief set a configuration variable
index ff31723..674cfed 100644 (file)
@@ -543,12 +543,12 @@ int smpi_main(const char* executable, int argc, char* argv[])
   }
 
   smpi_init_options_internal(true);
-  auto engine = simgrid::s4u::Engine::get_instance(&argc, argv);
+  simgrid::s4u::Engine engine(&argc, argv);
 
   sg_storage_file_system_init();
   // parse the platform file: get the host list
-  engine->load_platform(argv[1]);
-  engine->set_default_comm_data_copy_callback(smpi_comm_copy_buffer_callback);
+  engine.load_platform(argv[1]);
+  engine.set_default_comm_data_copy_callback(smpi_comm_copy_buffer_callback);
 
   if (smpi_cfg_privatization() == SmpiPrivStrategies::DLOPEN)
     smpi_init_privatization_dlopen(executable);
@@ -562,7 +562,7 @@ int smpi_main(const char* executable, int argc, char* argv[])
 
   const std::vector<const char*> args(argv + 2, argv + argc);
   int rank_counts =
-      smpi_deployment_smpirun(engine, smpi_hostfile.get(), smpi_np.get(), smpi_replay.get(), smpi_map.get(), args);
+      smpi_deployment_smpirun(&engine, smpi_hostfile.get(), smpi_np.get(), smpi_replay.get(), smpi_map.get(), args);
 
   SMPI_app_instance_register(smpi_default_instance_name.c_str(), nullptr, rank_counts);
   MPI_COMM_WORLD = *smpi_deployment_comm_world(smpi_default_instance_name);
@@ -574,7 +574,7 @@ int smpi_main(const char* executable, int argc, char* argv[])
   if (MC_is_active()) {
     MC_run();
   } else {
-    simgrid::kernel::EngineImpl::get_instance()->run();
+    engine.get_impl()->run();
 
     xbt_os_walltimer_stop(global_timer);
     simgrid::smpi::utils::print_time_analysis(xbt_os_timer_elapsed(global_timer));
index bbe48f2..0838631 100644 (file)
@@ -452,13 +452,14 @@ void sg_platf_new_bypass_route(simgrid::kernel::routing::RouteCreationArgs* rout
 
 void sg_platf_new_actor(simgrid::kernel::routing::ActorCreationArgs* actor)
 {
+  auto* engine   = simgrid::s4u::Engine::get_instance();
   sg_host_t host = sg_host_by_name(actor->host);
   if (not host) {
     // The requested host does not exist. Do a nice message to the user
     std::string msg = std::string("Cannot create actor '") + actor->function + "': host '" + actor->host +
                       "' does not exist\nExisting hosts: '";
 
-    std::vector<simgrid::s4u::Host*> list = simgrid::s4u::Engine::get_instance()->get_all_hosts();
+    std::vector<simgrid::s4u::Host*> list = engine->get_all_hosts();
 
     for (auto const& some_host : list) {
       msg += some_host->get_name();
@@ -471,8 +472,7 @@ void sg_platf_new_actor(simgrid::kernel::routing::ActorCreationArgs* actor)
     }
     xbt_die("%s", msg.c_str());
   }
-  const simgrid::kernel::actor::ActorCodeFactory& factory =
-      simgrid::kernel::EngineImpl::get_instance()->get_function(actor->function);
+  const simgrid::kernel::actor::ActorCodeFactory& factory = engine->get_impl()->get_function(actor->function);
   xbt_assert(factory, "Error while creating an actor from the XML file: Function '%s' not registered", actor->function);
 
   double start_time = actor->start_time;