Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add stuff to make transfer task names unique.
[simgrid.git] / src / simdag / sd_daxloader.c
index 6d6c0d9..07b5294 100644 (file)
@@ -40,6 +40,33 @@ static int dax_parse_int(const char *string) {
   return value;
 }
 
+/* Ensure that transfer tasks have unique names even though a file is used
+ * several times */
+
+void uniq_transfer_task_name(SD_task_t task){
+       SD_task_t child, parent;
+       xbt_dynar_t children, parents;
+       char *new_name;
+
+       children = SD_task_get_children(task);
+       parents = SD_task_get_parents(task);
+
+       xbt_dynar_get_cpy(children,0,&child);
+       xbt_dynar_get_cpy(parents,0,&parent);
+
+       new_name = bprintf("%s_%s_%s",
+                       SD_task_get_name(parent),
+                       SD_task_get_name(task),
+                       SD_task_get_name(child));
+
+       SD_task_set_name (task, new_name);
+
+       xbt_dynar_free_container(&children);
+       xbt_dynar_free_container(&parents);
+       free(new_name);
+}
+
+
 static YY_BUFFER_STATE input_buffer;
 
 static xbt_dynar_t result;
@@ -81,6 +108,9 @@ xbt_dynar_t SD_daxload(const char*filename) {
   files=xbt_dict_new();
   jobs=xbt_dict_new();
   root_task = SD_task_create_comp_seq("root",NULL,0);
+  /* by design the root task is always SCHEDULABLE */
+  __SD_task_set_state(root_task, SD_SCHEDULABLE);
+
   xbt_dynar_push(result,&root_task);
   end_task = SD_task_create_comp_seq("end",NULL,0);
 
@@ -134,6 +164,12 @@ xbt_dynar_t SD_daxload(const char*filename) {
 
   /* Free previous copy of the files */
   xbt_dict_free(&files);
+  unsigned int cpt;
+  xbt_dynar_foreach(result,cpt,file) {
+       if (SD_task_get_kind(file)==SD_TASK_COMM_E2E){
+               uniq_transfer_task_name(file);
+       }
+  }
 
   return result;
 }