Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
plug (massive) leak with ptaskL07
[simgrid.git] / src / surf / ptask_L07.cpp
index 8e90e06..19e7950 100644 (file)
@@ -41,7 +41,11 @@ HostL07Model::HostL07Model() : HostModel() {
   surf_cpu_model_pm = new CpuL07Model(this,maxminSystem_);
 }
 
-HostL07Model::~HostL07Model() = default;
+HostL07Model::~HostL07Model() 
+{
+  lmm_system_free(maxminSystem_);
+  maxminSystem_ = nullptr;
+}
 
 CpuL07Model::CpuL07Model(HostL07Model *hmodel,lmm_system_t sys)
   : CpuModel()
@@ -49,10 +53,8 @@ CpuL07Model::CpuL07Model(HostL07Model *hmodel,lmm_system_t sys)
   {
     maxminSystem_ = sys;
   }
-CpuL07Model::~CpuL07Model() {
-  lmm_system_free(maxminSystem_);
-  maxminSystem_ = nullptr;
-}
+CpuL07Model::~CpuL07Model() {}
+
 NetworkL07Model::NetworkL07Model(HostL07Model *hmodel, lmm_system_t sys)
   : NetworkModel()
   , hostModel_(hmodel)
@@ -60,16 +62,15 @@ NetworkL07Model::NetworkL07Model(HostL07Model *hmodel, lmm_system_t sys)
     maxminSystem_ = sys;
     loopback_     = createLink("__loopback__", 498000000, 0.000015, SURF_LINK_FATPIPE);
   }
-NetworkL07Model::~NetworkL07Model()
-{
-  maxminSystem_ = nullptr; // Avoid multi-free
-}
+NetworkL07Model::~NetworkL07Model() {}
 
 
 double HostL07Model::nextOccuringEvent(double now)
 {
   double min = HostModel::nextOccuringEventFull(now);
-  for (auto it(getRunningActionSet()->begin()), itend(getRunningActionSet()->end()); it != itend ; ++it) {
+  ActionList::iterator it(getRunningActionSet()->begin());
+  ActionList::iterator itend(getRunningActionSet()->end());
+  for (; it != itend; ++it) {
     L07Action *action = static_cast<L07Action*>(&*it);
     if (action->latency_ > 0 && (min < 0 || action->latency_ < min)) {
       min = action->latency_;
@@ -85,11 +86,12 @@ void HostL07Model::updateActionsState(double /*now*/, double delta) {
 
   L07Action *action;
   ActionList *actionSet = getRunningActionSet();
+  ActionList::iterator it(actionSet->begin());
+  ActionList::iterator itNext = it;
+  ActionList::iterator itend(actionSet->end());
 
-  for(ActionList::iterator it = actionSet->begin(), itNext = it
-   ; it != actionSet->end()
-   ; it =  itNext) {
-  ++itNext;
+  for (; it != itend; it = itNext) {
+    ++itNext;
     action = static_cast<L07Action*>(&*it);
     if (action->latency_ > 0) {
       if (action->latency_ > delta) {
@@ -117,20 +119,16 @@ void HostL07Model::updateActionsState(double /*now*/, double delta) {
      * If it's not done, it may have failed.
      */
 
-    if ((action->getRemains() <= 0) &&
-        (lmm_get_variable_weight(action->getVariable()) > 0)) {
-      action->finish();
-      action->setState(Action::State::done);
-    } else if ((action->getMaxDuration() != NO_MAX_DURATION) &&
-               (action->getMaxDuration() <= 0)) {
+    if (((action->getRemains() <= 0) && (lmm_get_variable_weight(action->getVariable()) > 0)) ||
+        ((action->getMaxDuration() != NO_MAX_DURATION) && (action->getMaxDuration() <= 0))) {
       action->finish();
       action->setState(Action::State::done);
     } else {
       /* Need to check that none of the model has failed */
-      lmm_constraint_t cnst = nullptr;
       int i = 0;
-
-      while ((cnst = lmm_get_cnst_from_var(maxminSystem_, action->getVariable(), i++))) {
+      lmm_constraint_t cnst = lmm_get_cnst_from_var(maxminSystem_, action->getVariable(), i);
+      while (cnst != nullptr) {
+        i++;
         void *constraint_id = lmm_constraint_id(cnst);
         if (static_cast<simgrid::surf::Resource*>(constraint_id)->isOff()) {
           XBT_DEBUG("Action (%p) Failed!!", action);
@@ -138,6 +136,7 @@ void HostL07Model::updateActionsState(double /*now*/, double delta) {
           action->setState(Action::State::failed);
           break;
         }
+        cnst = lmm_get_cnst_from_var(maxminSystem_, action->getVariable(), i);
       }
     }
   }
@@ -206,16 +205,14 @@ L07Action::L07Action(Model *model, int host_nb, sg_host_t *host_list,
   if(bytes_amount != nullptr) {
     for (int i = 0; i < host_nb; i++) {
       for (int j = 0; j < host_nb; j++) {
+        if (bytes_amount[i * host_nb + j] > 0.0) {
+          std::vector<LinkImpl*> route;
+          hostList_->at(i)->routeTo(hostList_->at(j), &route, nullptr);
 
-        if (bytes_amount[i * host_nb + j] == 0.0)
-          continue;
-
-        std::vector<LinkImpl*> route;
-        hostList_->at(i)->routeTo(hostList_->at(j), &route, nullptr);
-
-        for (auto link : route)
-          lmm_expand_add(model->getMaxminSystem(), link->constraint(), this->getVariable(),
-                         bytes_amount[i * host_nb + j]);
+          for (auto link : route)
+            lmm_expand_add(model->getMaxminSystem(), link->constraint(), this->getVariable(),
+                           bytes_amount[i * host_nb + j]);
+        }
       }
     }
   }
@@ -273,7 +270,7 @@ LinkL07::LinkL07(NetworkL07Model* model, const char* name, double bandwidth, dou
   if (policy == SURF_LINK_FATPIPE)
     lmm_constraint_shared(constraint());
 
-  s4u::Link::onCreation(this);
+  s4u::Link::onCreation(this->piface_);
 }
 
 Action *CpuL07::execution_start(double size)
@@ -380,6 +377,7 @@ void LinkL07::setLatency(double value)
     action->updateBound();
   }
 }
+LinkL07::~LinkL07() {}
 
 /**********
  * Action *
@@ -394,14 +392,12 @@ L07Action::~L07Action(){
 void L07Action::updateBound()
 {
   double lat_current = 0.0;
-  double lat_bound = -1.0;
-  int i, j;
 
   int hostNb = hostList_->size();
 
   if (communicationAmount_ != nullptr) {
-    for (i = 0; i < hostNb; i++) {
-      for (j = 0; j < hostNb; j++) {
+    for (int i = 0; i < hostNb; i++) {
+      for (int j = 0; j < hostNb; j++) {
 
         if (communicationAmount_[i * hostNb + j] > 0) {
           double lat = 0.0;
@@ -413,7 +409,7 @@ void L07Action::updateBound()
       }
     }
   }
-  lat_bound = sg_tcp_gamma / (2.0 * lat_current);
+  double lat_bound = sg_tcp_gamma / (2.0 * lat_current);
   XBT_DEBUG("action (%p) : lat_bound = %g", this, lat_bound);
   if ((latency_ == 0.0) && (suspended_ == 0)) {
     if (rate_ < 0)