aboutsummaryrefslogtreecommitdiff
path: root/src/dht
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-05-09 20:03:45 +0000
committerChristian Grothoff <christian@grothoff.org>2012-05-09 20:03:45 +0000
commit764cc859e7be44bf79a5a66e1aa6043a1c350b98 (patch)
treefe63cf91f49995e51a5b0f5d928e40baa3bf3a33 /src/dht
parentb4e0339e9687a8315bc078092ff017283d5de345 (diff)
downloadgnunet-764cc859e7be44bf79a5a66e1aa6043a1c350b98.tar.gz
gnunet-764cc859e7be44bf79a5a66e1aa6043a1c350b98.zip
-fix #2319
Diffstat (limited to 'src/dht')
-rw-r--r--src/dht/gnunet-service-dht_routing.c55
1 files changed, 30 insertions, 25 deletions
diff --git a/src/dht/gnunet-service-dht_routing.c b/src/dht/gnunet-service-dht_routing.c
index 2600b4460..013d8562f 100644
--- a/src/dht/gnunet-service-dht_routing.c
+++ b/src/dht/gnunet-service-dht_routing.c
@@ -297,6 +297,33 @@ GDS_ROUTING_process (enum GNUNET_BLOCK_Type type,
297 297
298 298
299/** 299/**
300 * Remove the oldest entry from the DHT routing table. Must only
301 * be called if it is known that there is at least one entry
302 * in the heap and hashmap.
303 */
304static void
305expire_oldest_entry ()
306{
307 struct RecentRequest *recent_req;
308
309 GNUNET_STATISTICS_update (GDS_stats,
310 gettext_noop
311 ("# Entries removed from routing table"), 1,
312 GNUNET_NO);
313 recent_req = GNUNET_CONTAINER_heap_peek (recent_heap);
314 GNUNET_assert (recent_req != NULL);
315 GNUNET_CONTAINER_heap_remove_node (recent_req->heap_node);
316 GNUNET_CONTAINER_bloomfilter_free (recent_req->reply_bf);
317 GNUNET_assert (GNUNET_YES ==
318 GNUNET_CONTAINER_multihashmap_remove (recent_map,
319 &recent_req->key,
320 recent_req));
321 GNUNET_free (recent_req);
322}
323
324
325
326/**
300 * Add a new entry to our routing table. 327 * Add a new entry to our routing table.
301 * 328 *
302 * @param sender peer that originated the request 329 * @param sender peer that originated the request
@@ -320,18 +347,7 @@ GDS_ROUTING_add (const struct GNUNET_PeerIdentity *sender,
320 struct RecentRequest *recent_req; 347 struct RecentRequest *recent_req;
321 348
322 while (GNUNET_CONTAINER_heap_get_size (recent_heap) >= DHT_MAX_RECENT) 349 while (GNUNET_CONTAINER_heap_get_size (recent_heap) >= DHT_MAX_RECENT)
323 { 350 expire_oldest_entry ();
324 GNUNET_STATISTICS_update (GDS_stats,
325 gettext_noop
326 ("# Entries removed from routing table"), 1,
327 GNUNET_NO);
328 recent_req = GNUNET_CONTAINER_heap_peek (recent_heap);
329 GNUNET_assert (recent_req != NULL);
330 GNUNET_CONTAINER_heap_remove_node (recent_req->heap_node);
331 GNUNET_CONTAINER_bloomfilter_free (recent_req->reply_bf);
332 GNUNET_free (recent_req);
333 }
334
335 GNUNET_STATISTICS_update (GDS_stats, 351 GNUNET_STATISTICS_update (GDS_stats,
336 gettext_noop ("# Entries added to routing table"), 352 gettext_noop ("# Entries added to routing table"),
337 1, GNUNET_NO); 353 1, GNUNET_NO);
@@ -371,23 +387,12 @@ GDS_ROUTING_init ()
371void 387void
372GDS_ROUTING_done () 388GDS_ROUTING_done ()
373{ 389{
374 struct RecentRequest *recent_req;
375
376 while (GNUNET_CONTAINER_heap_get_size (recent_heap) > 0) 390 while (GNUNET_CONTAINER_heap_get_size (recent_heap) > 0)
377 { 391 expire_oldest_entry ();
378 GNUNET_STATISTICS_update (GDS_stats,
379 gettext_noop
380 ("# Entries removed from routing table"), 1,
381 GNUNET_NO);
382 recent_req = GNUNET_CONTAINER_heap_peek (recent_heap);
383 GNUNET_assert (recent_req != NULL);
384 GNUNET_CONTAINER_heap_remove_node (recent_req->heap_node);
385 GNUNET_CONTAINER_bloomfilter_free (recent_req->reply_bf);
386 GNUNET_free (recent_req);
387 }
388 GNUNET_assert (0 == GNUNET_CONTAINER_heap_get_size (recent_heap)); 392 GNUNET_assert (0 == GNUNET_CONTAINER_heap_get_size (recent_heap));
389 GNUNET_CONTAINER_heap_destroy (recent_heap); 393 GNUNET_CONTAINER_heap_destroy (recent_heap);
390 recent_heap = NULL; 394 recent_heap = NULL;
395 GNUNET_assert (0 == GNUNET_CONTAINER_multihashmap_size (recent_map));
391 GNUNET_CONTAINER_multihashmap_destroy (recent_map); 396 GNUNET_CONTAINER_multihashmap_destroy (recent_map);
392 recent_map = NULL; 397 recent_map = NULL;
393} 398}