Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Free dynar after use in xbt_dynar_compare.
authornavarrop <navarrop@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 10 Mar 2011 13:01:12 +0000 (13:01 +0000)
committernavarrop <navarrop@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 10 Mar 2011 13:01:12 +0000 (13:01 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@9775 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/surf/surf_routing.c
src/xbt/dynar.c

index 72c4bc0..4fb63a4 100644 (file)
@@ -1373,7 +1373,6 @@ static void model_full_set_route(routing_component_t rc, const char *src,
                          (void*)link_route_to_test,
                          (int_f_cpvoid_cpvoid_t) surf_pointer_resource_cmp),
                          "The route between \"%s\" and \"%s\" already exists. If you are trying to define a reverse route, you must set the symmetrical=no attribute to your routes tags.", src,dst);
-               xbt_dynar_free(&link_route_to_test);
        }
        else
        {
@@ -1418,7 +1417,6 @@ static void model_full_set_route(routing_component_t rc, const char *src,
                              (void*)link_route_to_test,
                                  (int_f_cpvoid_cpvoid_t) surf_pointer_resource_cmp),
                                  "The route between \"%s\" and \"%s\" already exists", src,dst);
-                       xbt_dynar_free(&link_route_to_test);
                }
                else
                {
@@ -1747,7 +1745,6 @@ static void model_floyd_set_route(routing_component_t rc, const char *src,
                          (void*)link_route_to_test,
                          (int_f_cpvoid_cpvoid_t) surf_pointer_resource_cmp),
                          "The route between \"%s\" and \"%s\" already exists", src,dst);
-               xbt_free(link_route_to_test);
        }
        else
        {
index 911e53b..2125406 100644 (file)
@@ -776,16 +776,19 @@ XBT_INLINE int xbt_dynar_compare(xbt_dynar_t d1, xbt_dynar_t d2,
        if((!d1) || (!d2))
        {
                XBT_DEBUG("NULL dynar d1=%p d2=%p",d1,d2);
+               xbt_dynar_free(&d2);
                return 1;
        }
        if((d1->elmsize)!=(d2->elmsize))
        {
                XBT_DEBUG("Size of elmsize d1=%ld d2=%ld",d1->elmsize,d2->elmsize);
+               xbt_dynar_free(&d2);
                return 1; // xbt_die
        }
        if(xbt_dynar_length(d1) != xbt_dynar_length(d2))
        {
                XBT_DEBUG("Size of dynar d1=%ld d2=%ld",xbt_dynar_length(d1),xbt_dynar_length(d2));
+               xbt_dynar_free(&d2);
                return 1;
        }
 
@@ -795,8 +798,12 @@ XBT_INLINE int xbt_dynar_compare(xbt_dynar_t d1, xbt_dynar_t d2,
                void *data1 = xbt_dynar_get_as(d1, i, void *);
                void *data2 = xbt_dynar_get_as(d2, i, void *);
                XBT_DEBUG("link[%d] d1=%p d2=%p",i,data1,data2);
-               if(compar(data1,data2)) return 1;
+               if(compar(data1,data2)){
+                       xbt_dynar_free(&d2);
+                       return 1;
+               }
        }
+       xbt_dynar_free(&d2);
        return 0;
 }