Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Push last_route in global_routing.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Tue, 22 Nov 2011 14:48:47 +0000 (15:48 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Mon, 28 Nov 2011 10:21:31 +0000 (11:21 +0100)
Now we are able to free it at exit.

src/surf/surf_private.h
src/surf/surf_routing.c

index d8a993c..17bd311 100644 (file)
@@ -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);
 };
 
index 354272f..38e071a 100644 (file)
@@ -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);
 }