Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
plug a memleak
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 4 Nov 2018 00:45:07 +0000 (01:45 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sun, 4 Nov 2018 00:53:49 +0000 (01:53 +0100)
src/simdag/sd_task.cpp
src/surf/ptask_L07.cpp

index aa2fb4d..e75c51c 100644 (file)
@@ -794,26 +794,14 @@ void SD_task_run(SD_task_t task)
 
   XBT_VERB("Executing task '%s'", task->name);
 
-  /* Copy the elements of the task into the action */
-  int host_nb = task->allocation->size();
-  sg_host_t* hosts = new sg_host_t[host_nb];
-  std::copy_n(task->allocation->begin(), host_nb, hosts);
-
-  double* flops_amount = new double[host_nb]();
-  double* bytes_amount = new double[host_nb * host_nb]();
-
-  if(task->flops_amount)
-    std::copy_n(task->flops_amount, host_nb, flops_amount);
-  if(task->bytes_amount)
-    std::copy_n(task->bytes_amount, host_nb * host_nb, bytes_amount);
-
-  task->surf_action = surf_host_model->execute_parallel(host_nb, hosts, flops_amount, bytes_amount, task->rate);
+  /* Beware! The scheduling data are now used by the surf action directly! no copy was done */
+  task->surf_action = surf_host_model->execute_parallel(task->allocation->size(), task->allocation->data(),
+                                                        task->flops_amount, task->bytes_amount, task->rate);
 
   task->surf_action->set_data(task);
 
   XBT_DEBUG("surf_action = %p", task->surf_action);
 
-  __SD_task_destroy_scheduling_data(task);      /* now the scheduling data are not useful anymore */
   SD_task_set_state(task, SD_RUNNING);
   sd_global->return_set->insert(task);
 }
index 5943f79..1bf76de 100644 (file)
@@ -187,9 +187,11 @@ L07Action::L07Action(kernel::resource::Model* model, int host_nb, sg_host_t* hos
   if (latency_ > 0)
     model->get_maxmin_system()->update_variable_weight(get_variable(), 0.0);
 
-  if (flops_amount != nullptr)
-    for (int i = 0; i < host_nb; i++)
-      model->get_maxmin_system()->expand(host_list[i]->pimpl_cpu->get_constraint(), get_variable(), flops_amount[i]);
+  /* Expend it for the CPUs even if there is nothing to compute, to make sure that it gets expended even if there is no
+   * communication either */
+  for (int i = 0; i < host_nb; i++)
+    model->get_maxmin_system()->expand(host_list[i]->pimpl_cpu->get_constraint(), get_variable(),
+                                       (flops_amount == nullptr ? 0.0 : flops_amount[i]));
 
   if (bytes_amount != nullptr) {
     for (int i = 0; i < host_nb; i++) {