diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-04-10 14:38:33 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-04-10 14:38:33 +0000 |
commit | 562a20129f7e3eb01bdae830d619f9a22bb81286 (patch) | |
tree | 2724f90305198180a356acdc85006b3e5608288a /src/transport/plugin_transport_tcp.c | |
parent | 836020bfb15bd865fffacaf39a6183da285999f5 (diff) | |
download | gnunet-562a20129f7e3eb01bdae830d619f9a22bb81286.tar.gz gnunet-562a20129f7e3eb01bdae830d619f9a22bb81286.zip |
- fix for session counting: nat_wait sessions decreased session counter but did increase it
Diffstat (limited to 'src/transport/plugin_transport_tcp.c')
-rw-r--r-- | src/transport/plugin_transport_tcp.c | 63 |
1 files changed, 56 insertions, 7 deletions
diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c index 2753ba219..9247d8a73 100644 --- a/src/transport/plugin_transport_tcp.c +++ b/src/transport/plugin_transport_tcp.c | |||
@@ -403,6 +403,44 @@ struct Plugin | |||
403 | 403 | ||
404 | }; | 404 | }; |
405 | 405 | ||
406 | /* DEBUG CODE */ | ||
407 | static const char * | ||
408 | tcp_address_to_string (void *cls, const void *addr, size_t addrlen); | ||
409 | |||
410 | static unsigned int sessions; | ||
411 | |||
412 | static void inc_sessions (struct Plugin *plugin, struct Session *session, int line) | ||
413 | { | ||
414 | sessions ++; | ||
415 | unsigned int size = GNUNET_CONTAINER_multihashmap_size(plugin->sessionmap); | ||
416 | if (sessions != size) | ||
417 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", "Inconsistent sessions %u <-> session map size: %u\n", | ||
418 | sessions, size); | ||
419 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", "%4i Session increased to %u (session map size: %u): `%s' `%s'\n", | ||
420 | line, | ||
421 | sessions, | ||
422 | size, | ||
423 | GNUNET_i2s (&session->target), | ||
424 | tcp_address_to_string (NULL, session->addr, session->addrlen)); | ||
425 | } | ||
426 | |||
427 | static void dec_sessions (struct Plugin *plugin, struct Session *session, int line) | ||
428 | { | ||
429 | GNUNET_assert (sessions > 0); | ||
430 | unsigned int size = GNUNET_CONTAINER_multihashmap_size(plugin->sessionmap); | ||
431 | sessions --; | ||
432 | if (sessions != size) | ||
433 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", "Inconsistent sessions %u <-> session map size: %u\n", | ||
434 | sessions, size); | ||
435 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", "%4i Session decreased to %u (session map size: %u): `%s' `%s'\n", | ||
436 | line, | ||
437 | sessions, | ||
438 | size, | ||
439 | GNUNET_i2s (&session->target), | ||
440 | tcp_address_to_string (NULL, session->addr, session->addrlen)); | ||
441 | } | ||
442 | /* DEBUG CODE */ | ||
443 | |||
406 | 444 | ||
407 | /** | 445 | /** |
408 | * Function to check if an inbound connection is acceptable. | 446 | * Function to check if an inbound connection is acceptable. |
@@ -678,9 +716,11 @@ create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target, | |||
678 | GNUNET_CONTAINER_DLL_insert (ret->pending_messages_head, | 716 | GNUNET_CONTAINER_DLL_insert (ret->pending_messages_head, |
679 | ret->pending_messages_tail, pm); | 717 | ret->pending_messages_tail, pm); |
680 | if (is_nat != GNUNET_YES) | 718 | if (is_nat != GNUNET_YES) |
719 | { | ||
681 | GNUNET_STATISTICS_update (plugin->env->stats, | 720 | GNUNET_STATISTICS_update (plugin->env->stats, |
682 | gettext_noop ("# TCP sessions active"), 1, | 721 | gettext_noop ("# TCP sessions active"), 1, |
683 | GNUNET_NO); | 722 | GNUNET_NO); |
723 | } | ||
684 | return ret; | 724 | return ret; |
685 | } | 725 | } |
686 | 726 | ||
@@ -867,8 +907,14 @@ disconnect_session (struct Session *session) | |||
867 | GNUNET_i2s (&session->target), | 907 | GNUNET_i2s (&session->target), |
868 | tcp_address_to_string(NULL, session->addr, session->addrlen)); | 908 | tcp_address_to_string(NULL, session->addr, session->addrlen)); |
869 | 909 | ||
870 | GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(plugin->sessionmap, &session->target.hashPubKey, session) || | 910 | if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(plugin->sessionmap, &session->target.hashPubKey, session)) |
871 | GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(plugin->nat_wait_conns, &session->target.hashPubKey, session)); | 911 | { |
912 | GNUNET_STATISTICS_update (session->plugin->env->stats, | ||
913 | gettext_noop ("# TCP sessions active"), -1, | ||
914 | GNUNET_NO); | ||
915 | dec_sessions (plugin, session, __LINE__); | ||
916 | } | ||
917 | else GNUNET_assert (GNUNET_YES == GNUNET_CONTAINER_multihashmap_remove(plugin->nat_wait_conns, &session->target.hashPubKey, session)); | ||
872 | 918 | ||
873 | /* clean up state */ | 919 | /* clean up state */ |
874 | if (session->transmit_handle != NULL) | 920 | if (session->transmit_handle != NULL) |
@@ -919,9 +965,8 @@ disconnect_session (struct Session *session) | |||
919 | GNUNET_SERVER_client_drop (session->client); | 965 | GNUNET_SERVER_client_drop (session->client); |
920 | session->client = NULL; | 966 | session->client = NULL; |
921 | } | 967 | } |
922 | GNUNET_STATISTICS_update (session->plugin->env->stats, | 968 | |
923 | gettext_noop ("# TCP sessions active"), -1, | 969 | |
924 | GNUNET_NO); | ||
925 | GNUNET_free_non_null (session->addr); | 970 | GNUNET_free_non_null (session->addr); |
926 | GNUNET_assert (NULL == session->transmit_handle); | 971 | GNUNET_assert (NULL == session->transmit_handle); |
927 | GNUNET_free (session); | 972 | GNUNET_free (session); |
@@ -1285,7 +1330,7 @@ tcp_plugin_get_session (void *cls, | |||
1285 | session->ats_address_network_type = ats.value; | 1330 | session->ats_address_network_type = ats.value; |
1286 | 1331 | ||
1287 | GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &address->peer.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 1332 | GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &address->peer.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
1288 | 1333 | inc_sessions (plugin, session, __LINE__); | |
1289 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", | 1334 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "tcp", |
1290 | "Creating new session for `%s' address `%s' session %p\n", | 1335 | "Creating new session for `%s' address `%s' session %p\n", |
1291 | GNUNET_i2s (&address->peer), | 1336 | GNUNET_i2s (&address->peer), |
@@ -1674,7 +1719,7 @@ handle_tcp_nat_probe (void *cls, struct GNUNET_SERVER_Client *client, | |||
1674 | GNUNET_free (vaddr); | 1719 | GNUNET_free (vaddr); |
1675 | 1720 | ||
1676 | GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &session->target.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 1721 | GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &session->target.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
1677 | 1722 | inc_sessions (plugin, session, __LINE__); | |
1678 | GNUNET_STATISTICS_update (plugin->env->stats, | 1723 | GNUNET_STATISTICS_update (plugin->env->stats, |
1679 | gettext_noop ("# TCP sessions active"), 1, | 1724 | gettext_noop ("# TCP sessions active"), 1, |
1680 | GNUNET_NO); | 1725 | GNUNET_NO); |
@@ -1774,6 +1819,7 @@ handle_tcp_welcome (void *cls, struct GNUNET_SERVER_Client *client, | |||
1774 | #endif | 1819 | #endif |
1775 | } | 1820 | } |
1776 | GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &wm->clientIdentity.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 1821 | GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &wm->clientIdentity.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
1822 | inc_sessions (plugin, session, __LINE__); | ||
1777 | } | 1823 | } |
1778 | 1824 | ||
1779 | if (session->expecting_welcome != GNUNET_YES) | 1825 | if (session->expecting_welcome != GNUNET_YES) |
@@ -2192,6 +2238,9 @@ libgnunet_plugin_transport_tcp_init (void *cls) | |||
2192 | plugin->server = | 2238 | plugin->server = |
2193 | GNUNET_SERVER_create_with_sockets (&plugin_tcp_access_check, plugin, | 2239 | GNUNET_SERVER_create_with_sockets (&plugin_tcp_access_check, plugin, |
2194 | NULL, idle_timeout, GNUNET_YES); | 2240 | NULL, idle_timeout, GNUNET_YES); |
2241 | GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, "tcp", | ||
2242 | _("%s in section %s : %u\n"), | ||
2243 | "TIMEOUT", idle_timeout); | ||
2195 | } | 2244 | } |
2196 | plugin->handlers = GNUNET_malloc (sizeof (my_handlers)); | 2245 | plugin->handlers = GNUNET_malloc (sizeof (my_handlers)); |
2197 | memcpy (plugin->handlers, my_handlers, sizeof (my_handlers)); | 2246 | memcpy (plugin->handlers, my_handlers, sizeof (my_handlers)); |