From 7e5ada1667890ec568062179a5b11aa3d6c9054e Mon Sep 17 00:00:00 2001 From: "Nathan S. Evans" Date: Tue, 20 Apr 2010 11:49:35 +0000 Subject: [PATCH] memory leak fixes --- src/dht/dht_api.c | 9 ++++++++- src/dht/test_dht_api.c | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/dht/dht_api.c b/src/dht/dht_api.c index fda836d69..c188e171f 100644 --- a/src/dht/dht_api.c +++ b/src/dht/dht_api.c @@ -365,7 +365,7 @@ finish (struct GNUNET_DHT_Handle *handle, int code) GNUNET_SCHEDULER_REASON_PREREQ_DONE); } - if (pos->unique_id != 0) + if (pos->unique_id == 0) GNUNET_free(pos->msg); GNUNET_free (pos); handle->current = NULL; @@ -849,6 +849,9 @@ GNUNET_DHT_route_start (struct GNUNET_DHT_Handle *handle, uint16_t msize; GNUNET_HashCode uid_key; + if ((handle->current != NULL) && (handle->retransmit_stage != DHT_RETRANSMITTING)) + return NULL; + if (sizeof (struct GNUNET_DHT_RouteMessage) + ntohs (enc->size) >= GNUNET_SERVER_MAX_MESSAGE_SIZE) { GNUNET_break (0); @@ -903,6 +906,7 @@ GNUNET_DHT_route_start (struct GNUNET_DHT_Handle *handle, handle->retransmit_stage = DHT_RETRANSMITTING_MESSAGE_QUEUED; handle->retransmission_buffer = pending; } + route_handle->message = message; return route_handle; } @@ -1012,6 +1016,9 @@ GNUNET_DHT_route_stop (struct GNUNET_DHT_RouteHandle *route_handle, GNUNET_assert (GNUNET_CONTAINER_multihashmap_remove (route_handle->dht_handle->outstanding_requests, &uid_key, route_handle) == GNUNET_YES); + + GNUNET_free(route_handle->message); + GNUNET_free(route_handle); } diff --git a/src/dht/test_dht_api.c b/src/dht/test_dht_api.c index 10db5f45a..122dfff16 100644 --- a/src/dht/test_dht_api.c +++ b/src/dht/test_dht_api.c @@ -399,7 +399,7 @@ test_put (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_DHT_put (peer->dht_handle, &hash, 42, data_size, data, GNUNET_TIME_relative_to_absolute (TOTAL_TIMEOUT), TOTAL_TIMEOUT, &test_get, &p1); - + GNUNET_free(data); } static void -- 2.25.1