memory leak fixes
authorNathan S. Evans <evans@in.tum.de>
Tue, 20 Apr 2010 11:49:35 +0000 (11:49 +0000)
committerNathan S. Evans <evans@in.tum.de>
Tue, 20 Apr 2010 11:49:35 +0000 (11:49 +0000)
src/dht/dht_api.c
src/dht/test_dht_api.c

index fda836d691ab6df0d31fc1c4b44b1dc599d2b411..c188e171fbc0a63ddab3a0c66d7e10d5d56a0e87 100644 (file)
@@ -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);
 }
 
 
index 10db5f45a6bfaaf16319e7fb931adefc36066095..122dfff16db3f03b54dd94cd40e2a6774b8f82e9 100644 (file)
@@ -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