From 25137bd6bc44e1260223b141b46cedd6e7ef1da0 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Mon, 16 May 2011 17:24:25 +0200 Subject: [PATCH] Register get_route_latency in global_routing, and use it. Avoid an unnecessary double call to get_route... --- src/surf/network.c | 7 +++---- src/surf/surf_private.h | 13 +++++++------ src/surf/surf_routing.c | 1 + 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/surf/network.c b/src/surf/network.c index bbdd940eac..b294a4c9a7 100644 --- a/src/surf/network.c +++ b/src/surf/network.c @@ -610,9 +610,9 @@ static surf_action_t net_communicate(const char *src_name, xbt_dynar_t back_route = NULL; int constraints_per_variable = 0; - // I will need this route for some time so let's call get_route_no_cleanup - xbt_dynar_t route = global_routing->get_route_no_cleanup(src_name, dst_name); - + xbt_dynar_t route; + // I will need this route for some time so require for no cleanup + global_routing->get_route_latency(src_name, dst_name, &route, &latency, 0); if (sg_network_fullduplex == 1) { back_route = global_routing->get_route(dst_name, src_name); @@ -624,7 +624,6 @@ static surf_action_t net_communicate(const char *src_name, XBT_IN("(%s,%s,%g,%g)", src_name, dst_name, size, rate); /* LARGE PLATFORMS HACK: assert on total_route_size */ - latency = global_routing->get_latency(src_name,dst_name); xbt_assert(xbt_dynar_length(route) || latency, "You're trying to send data from %s to %s but there is no connection at all between these two hosts.", src_name, dst_name); diff --git a/src/surf/surf_private.h b/src/surf/surf_private.h index 42ec82ab90..2ff37935db 100644 --- a/src/surf/surf_private.h +++ b/src/surf/surf_private.h @@ -182,12 +182,13 @@ struct s_routing_global { routing_component_t root; void *loopback; size_t size_of_link; - xbt_dynar_t(*get_route) (const char *src, const char *dst); - xbt_dynar_t(*get_route_no_cleanup) (const char *src, const char *dst); - xbt_dynar_t(*get_onelink_routes) (void); - double (*get_latency) (const char *src, const char *dst); - e_surf_network_element_type_t(*get_network_element_type) (const char - *name); + xbt_dynar_t(*get_route) (const char *src, const char *dst); + xbt_dynar_t(*get_route_no_cleanup) (const char *src, const char *dst); + xbt_dynar_t(*get_onelink_routes) (void); + double (*get_latency) (const char *src, const char *dst); + void (*get_route_latency)(const char *src, const char *dst, + xbt_dynar_t *route, double *latency, int cleanup); + e_surf_network_element_type_t(*get_network_element_type) (const char *name); void (*finalize) (void); xbt_dynar_t last_route; }; diff --git a/src/surf/surf_routing.c b/src/surf/surf_routing.c index 0bd75d6794..e013c5c102 100644 --- a/src/surf/surf_routing.c +++ b/src/surf/surf_routing.c @@ -937,6 +937,7 @@ void routing_model_create(size_t size_of_links, void *loopback, double_f_cpvoid_ global_routing->get_latency = get_latency; global_routing->get_route_no_cleanup = get_route_no_cleanup; global_routing->get_onelink_routes = get_onelink_routes; + global_routing->get_route_latency = get_route_latency; global_routing->get_network_element_type = get_network_element_type; global_routing->finalize = finalize; global_routing->loopback = loopback; -- 2.20.1