Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
plug 2 memleaks
authorMartin Quinson <martin.quinson@loria.fr>
Tue, 26 Apr 2016 15:52:43 +0000 (17:52 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Tue, 26 Apr 2016 15:55:58 +0000 (17:55 +0200)
They were "still reachable", but annoying nonetheless.

include/simgrid/s4u/engine.hpp
include/simgrid/s4u/mailbox.hpp
include/simgrid/s4u/storage.hpp
src/s4u/s4u_engine.cpp
src/surf/surf_interface.cpp

index 68d3de2..ecd7f7d 100644 (file)
@@ -21,6 +21,9 @@ public:
   /** Constructor, taking the command line parameters of your main function */
   Engine(int *argc, char **argv);
 
+  /** Finalize the default engine and all its dependencies */
+  static void shutdown();
+
   /** @brief Load a platform file describing the environment
    *
    * The environment is either a XML file following the simgrid.dtd formalism, or a lua file.
index f1b2f3f..aa5f327 100644 (file)
@@ -56,6 +56,7 @@ private:
   std::string name_;
   smx_mailbox_t inferior_;
   static boost::unordered_map<std::string, Mailbox *> *mailboxes;
+  friend s4u::Engine;
 };
 }} // namespace simgrid::s4u
 
index 4b4d98a..e67a1a9 100644 (file)
@@ -40,6 +40,8 @@ XBT_PUBLIC(const char *) MSG_storage_get_host(msg_storage_t storage);
 protected:
   smx_storage_t inferior();
 private:
+  friend s4u::Engine;
+
   static boost::unordered_map<std::string, Storage *> *storages_;
   std::string name_;
   smx_storage_t inferior_;
index f7b078e..1f6a490 100644 (file)
@@ -9,6 +9,8 @@
 #include "mc/mc.h"
 #include "simgrid/s4u/As.hpp"
 #include "simgrid/s4u/engine.hpp"
+#include "simgrid/s4u/mailbox.hpp"
+#include "simgrid/s4u/storage.hpp"
 
 XBT_LOG_NEW_CATEGORY(s4u,"Log channels of the S4U (Simgrid for you) interface");
 using namespace simgrid;
@@ -29,6 +31,13 @@ s4u::Engine *s4u::Engine::instance() {
   return s4u::Engine::instance_;
 }
 
+void s4u::Engine::shutdown() {
+  delete s4u::Engine::instance_;
+  s4u::Engine::instance_ = nullptr;
+  delete s4u::Mailbox::mailboxes;
+  delete s4u::Storage::storages_;
+}
+
 double s4u::Engine::getClock()
 {
   return SIMIX_get_clock();
index a6a4825..4b948c1 100644 (file)
@@ -16,6 +16,7 @@
 #include "mc/mc.h"
 #include "virtual_machine.hpp"
 #include "src/instr/instr_private.h" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
+#include "simgrid/s4u/engine.hpp"
 
 XBT_LOG_NEW_CATEGORY(surf, "All SURF categories");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_kernel, surf, "Logging specific to SURF (kernel)");
@@ -348,6 +349,7 @@ void surf_exit(void)
 
   tmgr_finalize();
   sg_platf_exit();
+  simgrid::s4u::Engine::shutdown();
 
   NOW = 0;                      /* Just in case the user plans to restart the simulation afterward */
 }