diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-02-13 15:05:43 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-02-13 15:05:43 +0000 |
commit | 30bb20c41bda4a0221e6510495c3e5cac4bf1521 (patch) | |
tree | 7c6b836ea9bb55bc0bc2798008cf84cf8a5d5c66 /src | |
parent | b390f74b9652d8188ae82150852d5fc54b2be6ba (diff) | |
download | gnunet-30bb20c41bda4a0221e6510495c3e5cac4bf1521.tar.gz gnunet-30bb20c41bda4a0221e6510495c3e5cac4bf1521.zip |
-fixing leak of transmit context (cov 10128)
Diffstat (limited to 'src')
-rw-r--r-- | src/transport/gnunet-service-transport_clients.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/transport/gnunet-service-transport_clients.c b/src/transport/gnunet-service-transport_clients.c index a6b9c40ed..cf104687d 100644 --- a/src/transport/gnunet-service-transport_clients.c +++ b/src/transport/gnunet-service-transport_clients.c | |||
@@ -895,6 +895,16 @@ clients_handle_address_iterate (void *cls, struct GNUNET_SERVER_Client *client, | |||
895 | return; | 895 | return; |
896 | } | 896 | } |
897 | msg = (struct AddressIterateMessage *) message; | 897 | msg = (struct AddressIterateMessage *) message; |
898 | if ( (GNUNET_YES != ntohl (msg->one_shot)) && | ||
899 | (NULL != lookup_monitoring_client (client)) ) | ||
900 | { | ||
901 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK, | ||
902 | "ServerClient %p tried to start monitoring twice (MonitoringClient %p)\n", | ||
903 | client, mc); | ||
904 | GNUNET_break (0); | ||
905 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
906 | return; | ||
907 | } | ||
898 | GNUNET_SERVER_disable_receive_done_warning (client); | 908 | GNUNET_SERVER_disable_receive_done_warning (client); |
899 | tc = GNUNET_SERVER_transmit_context_create (client); | 909 | tc = GNUNET_SERVER_transmit_context_create (client); |
900 | if (0 == memcmp (&msg->peer, &all_zeros, sizeof (struct GNUNET_PeerIdentity))) | 910 | if (0 == memcmp (&msg->peer, &all_zeros, sizeof (struct GNUNET_PeerIdentity))) |
@@ -910,24 +920,10 @@ clients_handle_address_iterate (void *cls, struct GNUNET_SERVER_Client *client, | |||
910 | output_address (tc, &msg->peer, NULL, 0, address); | 920 | output_address (tc, &msg->peer, NULL, 0, address); |
911 | } | 921 | } |
912 | if (GNUNET_YES != ntohl (msg->one_shot)) | 922 | if (GNUNET_YES != ntohl (msg->one_shot)) |
913 | { | ||
914 | mc = lookup_monitoring_client (client); | ||
915 | if (mc != NULL) | ||
916 | { | ||
917 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK, | ||
918 | "ServerClient %p tried to start monitoring twice (MonitoringClient %p)\n", | ||
919 | client, mc); | ||
920 | GNUNET_break (0); | ||
921 | GNUNET_SERVER_receive_done (client, GNUNET_SYSERR); | ||
922 | return; | ||
923 | } | ||
924 | setup_monitoring_client (client, &msg->peer); | 923 | setup_monitoring_client (client, &msg->peer); |
925 | } | ||
926 | else | 924 | else |
927 | { | ||
928 | GNUNET_SERVER_transmit_context_append_data (tc, NULL, 0, | 925 | GNUNET_SERVER_transmit_context_append_data (tc, NULL, 0, |
929 | GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_ITERATE_RESPONSE); | 926 | GNUNET_MESSAGE_TYPE_TRANSPORT_ADDRESS_ITERATE_RESPONSE); |
930 | } | ||
931 | GNUNET_SERVER_transmit_context_run (tc, GNUNET_TIME_UNIT_FOREVER_REL); | 927 | GNUNET_SERVER_transmit_context_run (tc, GNUNET_TIME_UNIT_FOREVER_REL); |
932 | } | 928 | } |
933 | 929 | ||