From: Arnaud Giersch Date: Tue, 22 Nov 2011 14:48:47 +0000 (+0100) Subject: Push last_route in global_routing. X-Git-Tag: exp_20120216~241^2~56 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/d569ce424f3d391953106a9aaf7fff31ab865912 Push last_route in global_routing. Now we are able to free it at exit. --- diff --git a/src/surf/surf_private.h b/src/surf/surf_private.h index d8a993cc96..17bd311d2f 100644 --- a/src/surf/surf_private.h +++ b/src/surf/surf_private.h @@ -164,6 +164,7 @@ struct s_routing_global { AS_t root; void *loopback; size_t size_of_link; + xbt_dynar_t last_route; xbt_dynar_t(*get_onelink_routes) (void); }; diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 354272f590..38e071a983 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -588,13 +588,9 @@ static void _get_route_and_latency(const char *src, const char *dst, void routing_get_route_and_latency(const char *src, const char *dst, xbt_dynar_t * route, double *latency) { - static xbt_dynar_t last_route = NULL; - - int need_cleanup = !(*route); - - if (need_cleanup) { - xbt_dynar_free(&last_route); - last_route = *route = xbt_dynar_new(global_routing->size_of_link,NULL); + if (!*route) { + xbt_dynar_reset(global_routing->last_route); + *route = global_routing->last_route; } _get_route_and_latency(src, dst, route, latency); @@ -664,6 +660,7 @@ void routing_model_create(size_t size_of_links, void *loopback) global_routing->get_onelink_routes = get_onelink_routes; global_routing->loopback = loopback; global_routing->size_of_link = size_of_links; + global_routing->last_route = xbt_dynar_new(global_routing->size_of_link,NULL); /* no current routing at moment */ current_routing = NULL; } @@ -1147,6 +1144,7 @@ static void finalize_rec(AS_t as) { void routing_exit(void) { if (!global_routing) return; + xbt_dynar_free(&global_routing->last_route); finalize_rec(global_routing->root); xbt_free(global_routing); }