Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add Engine instance in sd_global and avoid using get_instance. plug a leak
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Mon, 20 Sep 2021 07:39:38 +0000 (09:39 +0200)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Mon, 20 Sep 2021 07:39:38 +0000 (09:39 +0200)
src/simdag/sd_global.cpp
src/simdag/simdag_private.hpp

index c2a20a2..e24e186 100644 (file)
@@ -146,9 +146,7 @@ void SD_init_nocheck(int* argc, char** argv)
 {
   xbt_assert(sd_global == nullptr, "SD_init() already called");
 
-  surf_init(argc, argv);
-
-  sd_global = new simgrid::sd::Global();
+  sd_global = new simgrid::sd::Global(argc, argv);
 
   simgrid::config::set_default<std::string>("host/model", "ptask_L07");
   if (simgrid::config::get_value<bool>("debug/clean-atexit"))
@@ -187,7 +185,7 @@ void SD_config(const char* key, const char* value)
  */
 void SD_create_environment(const char* platform_file)
 {
-  simgrid::s4u::Engine::get_instance()->load_platform(platform_file);
+  sd_global->engine_->load_platform(platform_file);
 
   XBT_DEBUG("Host number: %zu, link number: %zu", sg_host_count(), sg_link_count());
 #if SIMGRID_HAVE_JEDULE
@@ -239,5 +237,6 @@ void SD_exit()
 #if SIMGRID_HAVE_JEDULE
   jedule_sd_exit();
 #endif
+  sd_global->engine_->shutdown();
   delete sd_global;
 }
index 63cad93..7b12915 100644 (file)
@@ -3,6 +3,7 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include "simgrid/s4u/Engine.hpp"
 #include "simgrid/simdag.h"
 #include "surf/surf.hpp"
 #include <set>
@@ -19,11 +20,13 @@ namespace simgrid{
 namespace sd{
 class Global {
 public:
+  explicit Global(int* argc, char** argv) : engine_(new simgrid::s4u::Engine(argc, argv)) {}
   bool watch_point_reached = false; /* has a task just reached a watch point? */
   std::set<SD_task_t> initial_tasks;
   std::set<SD_task_t> runnable_tasks;
   std::set<SD_task_t> completed_tasks;
   std::set<SD_task_t> return_set;
+  s4u::Engine* engine_;
 };
 
 std::set<SD_task_t>* simulate (double how_long);