Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
finish to plug ptaskL07 leak
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Mon, 27 Mar 2017 14:36:08 +0000 (16:36 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Mon, 27 Mar 2017 14:36:08 +0000 (16:36 +0200)
network and cpu models share the same lmm as the host model. the host
model frees the lmm, but both sub models have to set their local
reference to nullptr before the parent destructors are called to
prevent double free/delete.

src/surf/ptask_L07.cpp
src/surf/ptask_L07.hpp

index 68203b5..cc883f5 100644 (file)
@@ -45,22 +45,34 @@ HostL07Model::~HostL07Model()
 {
   lmm_system_free(maxminSystem_);
   maxminSystem_ = nullptr;
 {
   lmm_system_free(maxminSystem_);
   maxminSystem_ = nullptr;
+  delete surf_network_model;
+  delete surf_cpu_model_pm;
 }
 
 CpuL07Model::CpuL07Model(HostL07Model *hmodel,lmm_system_t sys)
   : CpuModel()
   , hostModel_(hmodel)
 }
 
 CpuL07Model::CpuL07Model(HostL07Model *hmodel,lmm_system_t sys)
   : CpuModel()
   , hostModel_(hmodel)
-  {
-    maxminSystem_ = sys;
-  }
+{
+  maxminSystem_ = sys;
+}
+
+CpuL07Model::~CpuL07Model()
+{
+  maxminSystem_ = nullptr;
+}
 
 NetworkL07Model::NetworkL07Model(HostL07Model *hmodel, lmm_system_t sys)
   : NetworkModel()
   , hostModel_(hmodel)
 
 NetworkL07Model::NetworkL07Model(HostL07Model *hmodel, lmm_system_t sys)
   : NetworkModel()
   , hostModel_(hmodel)
-  {
-    maxminSystem_ = sys;
-    loopback_     = createLink("__loopback__", 498000000, 0.000015, SURF_LINK_FATPIPE);
-  }
+{
+  maxminSystem_ = sys;
+  loopback_     = createLink("__loopback__", 498000000, 0.000015, SURF_LINK_FATPIPE);
+}
+
+NetworkL07Model::~NetworkL07Model()
+{
+  maxminSystem_ = nullptr;
+}
 
 double HostL07Model::nextOccuringEvent(double now)
 {
 
 double HostL07Model::nextOccuringEvent(double now)
 {
index d5e3438..4a2d68d 100644 (file)
@@ -48,7 +48,7 @@ public:
 class CpuL07Model : public CpuModel {
 public:
   CpuL07Model(HostL07Model *hmodel,lmm_system_t sys);
 class CpuL07Model : public CpuModel {
 public:
   CpuL07Model(HostL07Model *hmodel,lmm_system_t sys);
-  ~CpuL07Model() = default;
+  ~CpuL07Model();
 
   Cpu *createCpu(simgrid::s4u::Host *host, std::vector<double> *speedPerPstate, int core) override;
   HostL07Model *hostModel_;
 
   Cpu *createCpu(simgrid::s4u::Host *host, std::vector<double> *speedPerPstate, int core) override;
   HostL07Model *hostModel_;
@@ -57,7 +57,7 @@ public:
 class NetworkL07Model : public NetworkModel {
 public:
   NetworkL07Model(HostL07Model *hmodel, lmm_system_t sys);
 class NetworkL07Model : public NetworkModel {
 public:
   NetworkL07Model(HostL07Model *hmodel, lmm_system_t sys);
-  ~NetworkL07Model() = default;
+  ~NetworkL07Model();
   LinkImpl* createLink(const char* name, double bandwidth, double latency,
                        e_surf_link_sharing_policy_t policy) override;
 
   LinkImpl* createLink(const char* name, double bandwidth, double latency,
                        e_surf_link_sharing_policy_t policy) override;