Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
When creating a datatype, make sure we're not trying to redo an already creeated...
[simgrid.git] / src / gras / DataDesc / ddt_create.c
index 7cfff63..f1e6a5b 100644 (file)
@@ -611,14 +611,30 @@ gras_datadesc_type_t
 gras_datadesc_ref_pop_arr(gras_datadesc_type_t element_type)
 {
 
-  gras_datadesc_type_t res;
+  gras_datadesc_type_t res,ddt2;
   char *name = (char *) xbt_malloc(strlen(element_type->name) + 4);
 
   sprintf(name, "%s[]", element_type->name);
+  /* Make sure we are not trying to redefine a ddt with the same name */
+  ddt2 = gras_datadesc_by_name_or_null(name);
+  int cpt=0;
+  while (ddt2) {
+    free(name);
+    name=bprintf("%s[]_%d",element_type->name,cpt++);
+    ddt2=gras_datadesc_by_name_or_null(name);
+  }
 
   res = gras_datadesc_array_dyn(name, element_type, gras_datadesc_cb_pop);
 
   sprintf(name, "%s[]*", element_type->name);
+  cpt=0;
+  ddt2 = gras_datadesc_by_name_or_null(name);
+  while (ddt2) {
+    free(name);
+    name=bprintf("%s[]*_%d",element_type->name,cpt++);
+    ddt2=gras_datadesc_by_name_or_null(name);
+  }
+
   res = gras_datadesc_ref(name, res);
 
   free(name);