Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
in gras_dynar_cursor_rm, we want to get the content to free it if there is a
[simgrid.git] / src / xbt / dynar.c
index b039d34..3cedd0e 100644 (file)
@@ -10,8 +10,7 @@
 
 #include "gras_private.h"
 
-
-GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(dynar,GRAS);
+GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(dynar,tbx);
 
 struct gras_dynar_s {
   size_t          size;
@@ -552,7 +551,21 @@ void gras_dynar_cursor_rm(gras_dynar_t * dynar,
                          int          * const cursor) {
   void *dst;
 
-  gras_dynar_remove_at(dynar,(*cursor)--,&dst);
-  if (dynar->free)
-    (dynar->free)(dst);
+  if (dynar->elmsize > sizeof(void*)) {
+    DEBUG0("Elements too big to fit into a pointer");
+    if (dynar->free) {
+      dst=malloc(dynar->elmsize);
+      gras_dynar_remove_at(dynar,(*cursor)--,dst);
+      (dynar->free)(dst);
+      free(dst);
+    } else {
+      DEBUG0("Ok, we dont care about the element when no free function");
+      gras_dynar_remove_at(dynar,(*cursor)--,NULL);
+    }
+      
+  } else {
+    gras_dynar_remove_at(dynar,(*cursor)--,&dst);
+    if (dynar->free)
+      (dynar->free)(dst);
+  }
 }