From f4654009a460c28f1da7ad617da863e265c128d3 Mon Sep 17 00:00:00 2001 From: Lucas Schnorr Date: Thu, 8 Sep 2011 15:57:43 +0200 Subject: [PATCH] [NS3] clean-up of dictionary of sockets when flows finished details: - plus some debug messages --- src/surf/network_ns3.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/surf/network_ns3.c b/src/surf/network_ns3.c index 7e669dc4d4..898f9c2176 100644 --- a/src/surf/network_ns3.c +++ b/src/surf/network_ns3.c @@ -438,6 +438,9 @@ static void ns3_update_actions_state(double now, double delta) char *key; void *data; + static xbt_dynar_t socket_to_destroy = NULL; + if(!socket_to_destroy) socket_to_destroy = xbt_dynar_new(sizeof(char*),NULL); + surf_action_network_ns3_t action = NULL; xbt_swag_t running_actions = surf_network_model->states.running_action_set; @@ -452,6 +455,7 @@ static void ns3_update_actions_state(double now, double delta) xbt_dict_foreach(dict_socket,cursor,key,data){ action = (surf_action_network_ns3_t)ns3_get_socket_action(data); + XBT_DEBUG("Processing socket %p (action %p)",data,action); action->generic_action.remains = action->generic_action.cost - ns3_get_socket_sent(data); #ifdef HAVE_TRACING @@ -476,10 +480,20 @@ static void ns3_update_actions_state(double now, double delta) #endif if(ns3_get_socket_is_finished(data) == 1){ + xbt_dynar_push(socket_to_destroy,&key); action->generic_action.finish = now; surf_action_state_set(&(action->generic_action), SURF_ACTION_DONE); } } + + while (xbt_dynar_length(socket_to_destroy)){ + xbt_dynar_pop(socket_to_destroy,&key); + + void *data = xbt_dict_get (dict_socket, key); + surf_action_network_ns3_t action = (surf_action_network_ns3_t)ns3_get_socket_action(data); + XBT_DEBUG ("Removing socket %p of action %p", key, action); + xbt_dict_remove(dict_socket,key); + } return; } @@ -533,7 +547,7 @@ static int action_unref(surf_action_t action) if (action->category) xbt_free(action->category); #endif - + XBT_DEBUG ("Removing action %p", action); surf_action_free(&action); return 1; } -- 2.20.1