diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-10-07 18:19:32 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-10-07 18:19:32 +0000 |
commit | a60b958f984d08525b636a2c7eae564ebec54ae6 (patch) | |
tree | 6dcbbf91d734834f804b2fd9ab790244e2d60e6c | |
parent | decf459805cdb3f6811f979df4831bc2ce9a2858 (diff) | |
download | gnunet-a60b958f984d08525b636a2c7eae564ebec54ae6.tar.gz gnunet-a60b958f984d08525b636a2c7eae564ebec54ae6.zip |
-chaning multihashmap API to allow option for avoiding key allocation
53 files changed, 150 insertions, 115 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index 72176fc76..075324762 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -929,7 +929,7 @@ GAS_addresses_init (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
929 | 929 | ||
930 | running = GNUNET_NO; | 930 | running = GNUNET_NO; |
931 | 931 | ||
932 | addresses = GNUNET_CONTAINER_multihashmap_create (128); | 932 | addresses = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
933 | GNUNET_assert (NULL != addresses); | 933 | GNUNET_assert (NULL != addresses); |
934 | 934 | ||
935 | if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string(cfg, "ats", "WAN_QUOTA_IN", "a_wan_in_str)) | 935 | if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string(cfg, "ats", "WAN_QUOTA_IN", "a_wan_in_str)) |
diff --git a/src/ats/gnunet-service-ats_reservations.c b/src/ats/gnunet-service-ats_reservations.c index daacbbec0..3354c4e41 100644 --- a/src/ats/gnunet-service-ats_reservations.c +++ b/src/ats/gnunet-service-ats_reservations.c | |||
@@ -122,7 +122,7 @@ GAS_reservations_set_bandwidth (const struct GNUNET_PeerIdentity *peer, | |||
122 | void | 122 | void |
123 | GAS_reservations_init () | 123 | GAS_reservations_init () |
124 | { | 124 | { |
125 | trackers = GNUNET_CONTAINER_multihashmap_create (128); | 125 | trackers = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
126 | } | 126 | } |
127 | 127 | ||
128 | 128 | ||
diff --git a/src/ats/perf_ats_mlp.c b/src/ats/perf_ats_mlp.c index c8ecda685..51f910256 100644 --- a/src/ats/perf_ats_mlp.c +++ b/src/ats/perf_ats_mlp.c | |||
@@ -213,7 +213,7 @@ check (void *cls, char *const *args, const char *cfgfile, | |||
213 | p = GNUNET_malloc (peers * sizeof (struct ATS_Peer)); | 213 | p = GNUNET_malloc (peers * sizeof (struct ATS_Peer)); |
214 | a = GNUNET_malloc (peers * addresses * sizeof (struct ATS_Address)); | 214 | a = GNUNET_malloc (peers * addresses * sizeof (struct ATS_Address)); |
215 | 215 | ||
216 | amap = GNUNET_CONTAINER_multihashmap_create(addresses * peers); | 216 | amap = GNUNET_CONTAINER_multihashmap_create(addresses * peers, GNUNET_NO); |
217 | 217 | ||
218 | mlp->auto_solve = GNUNET_NO; | 218 | mlp->auto_solve = GNUNET_NO; |
219 | if (start == 0) | 219 | if (start == 0) |
diff --git a/src/ats/test_ats_mlp.c b/src/ats/test_ats_mlp.c index c4672103d..3e449dbd2 100644 --- a/src/ats/test_ats_mlp.c +++ b/src/ats/test_ats_mlp.c | |||
@@ -76,7 +76,7 @@ check (void *cls, char *const *args, const char *cfgfile, | |||
76 | 76 | ||
77 | stats = GNUNET_STATISTICS_create("ats", cfg); | 77 | stats = GNUNET_STATISTICS_create("ats", cfg); |
78 | 78 | ||
79 | addresses = GNUNET_CONTAINER_multihashmap_create (10); | 79 | addresses = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO); |
80 | 80 | ||
81 | mlp = GAS_mlp_init (cfg, NULL, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS); | 81 | mlp = GAS_mlp_init (cfg, NULL, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS); |
82 | mlp->auto_solve = GNUNET_NO; | 82 | mlp->auto_solve = GNUNET_NO; |
diff --git a/src/ats/test_ats_mlp_averaging.c b/src/ats/test_ats_mlp_averaging.c index bf219df22..2f70137df 100644 --- a/src/ats/test_ats_mlp_averaging.c +++ b/src/ats/test_ats_mlp_averaging.c | |||
@@ -77,7 +77,7 @@ check (void *cls, char *const *args, const char *cfgfile, | |||
77 | 77 | ||
78 | stats = GNUNET_STATISTICS_create("ats", cfg); | 78 | stats = GNUNET_STATISTICS_create("ats", cfg); |
79 | 79 | ||
80 | addresses = GNUNET_CONTAINER_multihashmap_create (10); | 80 | addresses = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO); |
81 | 81 | ||
82 | mlp = GAS_mlp_init (cfg, NULL, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS); | 82 | mlp = GAS_mlp_init (cfg, NULL, MLP_MAX_EXEC_DURATION, MLP_MAX_ITERATIONS); |
83 | mlp->auto_solve = GNUNET_NO; | 83 | mlp->auto_solve = GNUNET_NO; |
diff --git a/src/chat/gnunet-service-chat.c b/src/chat/gnunet-service-chat.c index 580851557..ec988e8fd 100644 --- a/src/chat/gnunet-service-chat.c +++ b/src/chat/gnunet-service-chat.c | |||
@@ -1706,7 +1706,7 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, | |||
1706 | cfg = c; | 1706 | cfg = c; |
1707 | nc = GNUNET_SERVER_notification_context_create (server, 16); | 1707 | nc = GNUNET_SERVER_notification_context_create (server, 16); |
1708 | connected_peers = | 1708 | connected_peers = |
1709 | GNUNET_CONTAINER_multihashmap_create (EXPECTED_NEIGHBOUR_COUNT); | 1709 | GNUNET_CONTAINER_multihashmap_create (EXPECTED_NEIGHBOUR_COUNT, GNUNET_NO); |
1710 | GNUNET_SERVER_add_handlers (server, handlers); | 1710 | GNUNET_SERVER_add_handlers (server, handlers); |
1711 | core = | 1711 | core = |
1712 | GNUNET_CORE_connect (cfg, NULL, &core_init, | 1712 | GNUNET_CORE_connect (cfg, NULL, &core_init, |
diff --git a/src/core/core_api.c b/src/core/core_api.c index 46105a466..4d1a5493f 100644 --- a/src/core/core_api.c +++ b/src/core/core_api.c | |||
@@ -1173,7 +1173,7 @@ GNUNET_CORE_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
1173 | h->handlers = handlers; | 1173 | h->handlers = handlers; |
1174 | h->hcnt = 0; | 1174 | h->hcnt = 0; |
1175 | h->currently_down = GNUNET_YES; | 1175 | h->currently_down = GNUNET_YES; |
1176 | h->peers = GNUNET_CONTAINER_multihashmap_create (128); | 1176 | h->peers = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
1177 | h->retry_backoff = GNUNET_TIME_UNIT_MILLISECONDS; | 1177 | h->retry_backoff = GNUNET_TIME_UNIT_MILLISECONDS; |
1178 | if (NULL != handlers) | 1178 | if (NULL != handlers) |
1179 | while (handlers[h->hcnt].callback != NULL) | 1179 | while (handlers[h->hcnt].callback != NULL) |
diff --git a/src/core/gnunet-service-core_clients.c b/src/core/gnunet-service-core_clients.c index 91f1ae65a..56ebcc423 100644 --- a/src/core/gnunet-service-core_clients.c +++ b/src/core/gnunet-service-core_clients.c | |||
@@ -298,7 +298,7 @@ handle_client_init (void *cls, struct GNUNET_SERVER_Client *client, | |||
298 | c->options = ntohl (im->options); | 298 | c->options = ntohl (im->options); |
299 | all_client_options |= c->options; | 299 | all_client_options |= c->options; |
300 | c->types = (const uint16_t *) &c[1]; | 300 | c->types = (const uint16_t *) &c[1]; |
301 | c->connectmap = GNUNET_CONTAINER_multihashmap_create (16); | 301 | c->connectmap = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_NO); |
302 | GNUNET_assert (GNUNET_YES == | 302 | GNUNET_assert (GNUNET_YES == |
303 | GNUNET_CONTAINER_multihashmap_put (c->connectmap, | 303 | GNUNET_CONTAINER_multihashmap_put (c->connectmap, |
304 | &GSC_my_identity.hashPubKey, | 304 | &GSC_my_identity.hashPubKey, |
@@ -349,7 +349,7 @@ handle_client_send_request (void *cls, struct GNUNET_SERVER_Client *client, | |||
349 | return; | 349 | return; |
350 | } | 350 | } |
351 | if (c->requests == NULL) | 351 | if (c->requests == NULL) |
352 | c->requests = GNUNET_CONTAINER_multihashmap_create (16); | 352 | c->requests = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_NO); |
353 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 353 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
354 | "Client asked for transmission to `%s'\n", | 354 | "Client asked for transmission to `%s'\n", |
355 | GNUNET_i2s (&req->peer)); | 355 | GNUNET_i2s (&req->peer)); |
diff --git a/src/core/gnunet-service-core_neighbours.c b/src/core/gnunet-service-core_neighbours.c index 3b1357425..aa77fe47e 100644 --- a/src/core/gnunet-service-core_neighbours.c +++ b/src/core/gnunet-service-core_neighbours.c | |||
@@ -464,7 +464,7 @@ GSC_NEIGHBOURS_transmit (const struct GNUNET_PeerIdentity *target, | |||
464 | int | 464 | int |
465 | GSC_NEIGHBOURS_init () | 465 | GSC_NEIGHBOURS_init () |
466 | { | 466 | { |
467 | neighbours = GNUNET_CONTAINER_multihashmap_create (128); | 467 | neighbours = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
468 | transport = | 468 | transport = |
469 | GNUNET_TRANSPORT_connect (GSC_cfg, &GSC_my_identity, NULL, | 469 | GNUNET_TRANSPORT_connect (GSC_cfg, &GSC_my_identity, NULL, |
470 | &handle_transport_receive, | 470 | &handle_transport_receive, |
diff --git a/src/core/gnunet-service-core_sessions.c b/src/core/gnunet-service-core_sessions.c index 87fa91189..3a603bc81 100644 --- a/src/core/gnunet-service-core_sessions.c +++ b/src/core/gnunet-service-core_sessions.c | |||
@@ -782,7 +782,7 @@ GSC_SESSIONS_add_to_typemap (const struct GNUNET_PeerIdentity *peer, | |||
782 | void | 782 | void |
783 | GSC_SESSIONS_init () | 783 | GSC_SESSIONS_init () |
784 | { | 784 | { |
785 | sessions = GNUNET_CONTAINER_multihashmap_create (128); | 785 | sessions = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
786 | } | 786 | } |
787 | 787 | ||
788 | 788 | ||
diff --git a/src/dht/dht_api.c b/src/dht/dht_api.c index 46436755b..023ffe60d 100644 --- a/src/dht/dht_api.c +++ b/src/dht/dht_api.c | |||
@@ -915,7 +915,7 @@ GNUNET_DHT_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
915 | handle->cfg = cfg; | 915 | handle->cfg = cfg; |
916 | handle->uid_gen = | 916 | handle->uid_gen = |
917 | GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, UINT64_MAX); | 917 | GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, UINT64_MAX); |
918 | handle->active_requests = GNUNET_CONTAINER_multihashmap_create (ht_len); | 918 | handle->active_requests = GNUNET_CONTAINER_multihashmap_create (ht_len, GNUNET_NO); |
919 | if (GNUNET_NO == try_connect (handle)) | 919 | if (GNUNET_NO == try_connect (handle)) |
920 | { | 920 | { |
921 | GNUNET_DHT_disconnect (handle); | 921 | GNUNET_DHT_disconnect (handle); |
diff --git a/src/dht/gnunet-service-dht_clients.c b/src/dht/gnunet-service-dht_clients.c index a67155b89..314cae7c9 100644 --- a/src/dht/gnunet-service-dht_clients.c +++ b/src/dht/gnunet-service-dht_clients.c | |||
@@ -1351,7 +1351,7 @@ GDS_CLIENTS_init (struct GNUNET_SERVER_Handle *server) | |||
1351 | sizeof (struct GNUNET_DHT_MonitorStartStopMessage)}, | 1351 | sizeof (struct GNUNET_DHT_MonitorStartStopMessage)}, |
1352 | {NULL, NULL, 0, 0} | 1352 | {NULL, NULL, 0, 0} |
1353 | }; | 1353 | }; |
1354 | forward_map = GNUNET_CONTAINER_multihashmap_create (1024); | 1354 | forward_map = GNUNET_CONTAINER_multihashmap_create (1024, GNUNET_NO); |
1355 | retry_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | 1355 | retry_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); |
1356 | GNUNET_SERVER_add_handlers (server, plugin_handlers); | 1356 | GNUNET_SERVER_add_handlers (server, plugin_handlers); |
1357 | GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL); | 1357 | GNUNET_SERVER_disconnect_notify (server, &handle_client_disconnect, NULL); |
diff --git a/src/dht/gnunet-service-dht_hello.c b/src/dht/gnunet-service-dht_hello.c index b4c5150c9..19da79e23 100644 --- a/src/dht/gnunet-service-dht_hello.c +++ b/src/dht/gnunet-service-dht_hello.c | |||
@@ -99,7 +99,7 @@ void | |||
99 | GDS_HELLO_init () | 99 | GDS_HELLO_init () |
100 | { | 100 | { |
101 | pnc = GNUNET_PEERINFO_notify (GDS_cfg, &process_hello, NULL); | 101 | pnc = GNUNET_PEERINFO_notify (GDS_cfg, &process_hello, NULL); |
102 | peer_to_hello = GNUNET_CONTAINER_multihashmap_create (256); | 102 | peer_to_hello = GNUNET_CONTAINER_multihashmap_create (256, GNUNET_NO); |
103 | } | 103 | } |
104 | 104 | ||
105 | 105 | ||
diff --git a/src/dht/gnunet-service-dht_neighbours.c b/src/dht/gnunet-service-dht_neighbours.c index 7401eb8ac..198b64f53 100644 --- a/src/dht/gnunet-service-dht_neighbours.c +++ b/src/dht/gnunet-service-dht_neighbours.c | |||
@@ -2018,7 +2018,7 @@ GDS_NEIGHBOURS_init () | |||
2018 | GNUNET_NO, core_handlers); | 2018 | GNUNET_NO, core_handlers); |
2019 | if (coreAPI == NULL) | 2019 | if (coreAPI == NULL) |
2020 | return GNUNET_SYSERR; | 2020 | return GNUNET_SYSERR; |
2021 | all_known_peers = GNUNET_CONTAINER_multihashmap_create (256); | 2021 | all_known_peers = GNUNET_CONTAINER_multihashmap_create (256, GNUNET_NO); |
2022 | return GNUNET_OK; | 2022 | return GNUNET_OK; |
2023 | } | 2023 | } |
2024 | 2024 | ||
diff --git a/src/dht/gnunet-service-dht_routing.c b/src/dht/gnunet-service-dht_routing.c index 796991b5b..4c2e69b36 100644 --- a/src/dht/gnunet-service-dht_routing.c +++ b/src/dht/gnunet-service-dht_routing.c | |||
@@ -429,7 +429,7 @@ void | |||
429 | GDS_ROUTING_init () | 429 | GDS_ROUTING_init () |
430 | { | 430 | { |
431 | recent_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | 431 | recent_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); |
432 | recent_map = GNUNET_CONTAINER_multihashmap_create (DHT_MAX_RECENT * 4 / 3); | 432 | recent_map = GNUNET_CONTAINER_multihashmap_create (DHT_MAX_RECENT * 4 / 3, GNUNET_NO); |
433 | } | 433 | } |
434 | 434 | ||
435 | 435 | ||
diff --git a/src/dv/dv_api.c b/src/dv/dv_api.c index 131503e6e..8f866e2e5 100644 --- a/src/dv/dv_api.c +++ b/src/dv/dv_api.c | |||
@@ -587,7 +587,7 @@ GNUNET_DV_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
587 | GNUNET_YES, &transmit_start, | 587 | GNUNET_YES, &transmit_start, |
588 | start_context); | 588 | start_context); |
589 | 589 | ||
590 | handle->send_callbacks = GNUNET_CONTAINER_multihashmap_create (100); | 590 | handle->send_callbacks = GNUNET_CONTAINER_multihashmap_create (100, GNUNET_NO); |
591 | 591 | ||
592 | return handle; | 592 | return handle; |
593 | } | 593 | } |
diff --git a/src/dv/gnunet-service-dv.c b/src/dv/gnunet-service-dv.c index 5c0b6f5fa..ca881aa91 100644 --- a/src/dv/gnunet-service-dv.c +++ b/src/dv/gnunet-service-dv.c | |||
@@ -3290,9 +3290,9 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, | |||
3290 | neighbor_max_heap = | 3290 | neighbor_max_heap = |
3291 | GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MAX); | 3291 | GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MAX); |
3292 | 3292 | ||
3293 | direct_neighbors = GNUNET_CONTAINER_multihashmap_create (max_hosts); | 3293 | direct_neighbors = GNUNET_CONTAINER_multihashmap_create (max_hosts, GNUNET_NO); |
3294 | extended_neighbors = | 3294 | extended_neighbors = |
3295 | GNUNET_CONTAINER_multihashmap_create (max_table_size * 3); | 3295 | GNUNET_CONTAINER_multihashmap_create (max_table_size * 3, GNUNET_NO); |
3296 | 3296 | ||
3297 | GNUNET_SERVER_add_handlers (server, plugin_handlers); | 3297 | GNUNET_SERVER_add_handlers (server, plugin_handlers); |
3298 | coreAPI = GNUNET_CORE_connect (cfg, NULL, /* FIXME: anything we want to pass around? */ | 3298 | coreAPI = GNUNET_CORE_connect (cfg, NULL, /* FIXME: anything we want to pass around? */ |
diff --git a/src/dv/test_transport_api_dv.c b/src/dv/test_transport_api_dv.c index 769694f90..c78d5072d 100644 --- a/src/dv/test_transport_api_dv.c +++ b/src/dv/test_transport_api_dv.c | |||
@@ -1180,7 +1180,7 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
1180 | (GNUNET_TIME_UNIT_MINUTES, 5), &end_badly, | 1180 | (GNUNET_TIME_UNIT_MINUTES, 5), &end_badly, |
1181 | "didn't start all daemons in reasonable amount of time!!!"); | 1181 | "didn't start all daemons in reasonable amount of time!!!"); |
1182 | 1182 | ||
1183 | peer_daemon_hash = GNUNET_CONTAINER_multihashmap_create (peers_left); | 1183 | peer_daemon_hash = GNUNET_CONTAINER_multihashmap_create (peers_left, GNUNET_NO); |
1184 | pg = GNUNET_TESTING_daemons_start (cfg, peers_left, /* Total number of peers */ | 1184 | pg = GNUNET_TESTING_daemons_start (cfg, peers_left, /* Total number of peers */ |
1185 | peers_left, /* Number of outstanding connections */ | 1185 | peers_left, /* Number of outstanding connections */ |
1186 | peers_left, /* Number of parallel ssh connections, or peers being started at once */ | 1186 | peers_left, /* Number of parallel ssh connections, or peers being started at once */ |
diff --git a/src/exit/gnunet-daemon-exit.c b/src/exit/gnunet-daemon-exit.c index 79c1f8435..4359db33c 100644 --- a/src/exit/gnunet-daemon-exit.c +++ b/src/exit/gnunet-daemon-exit.c | |||
@@ -3194,11 +3194,11 @@ run (void *cls, char *const *args GNUNET_UNUSED, | |||
3194 | } | 3194 | } |
3195 | exit_argv[7] = NULL; | 3195 | exit_argv[7] = NULL; |
3196 | 3196 | ||
3197 | udp_services = GNUNET_CONTAINER_multihashmap_create (65536); | 3197 | udp_services = GNUNET_CONTAINER_multihashmap_create (65536, GNUNET_NO); |
3198 | tcp_services = GNUNET_CONTAINER_multihashmap_create (65536); | 3198 | tcp_services = GNUNET_CONTAINER_multihashmap_create (65536, GNUNET_NO); |
3199 | GNUNET_CONFIGURATION_iterate_sections (cfg, &read_service_conf, NULL); | 3199 | GNUNET_CONFIGURATION_iterate_sections (cfg, &read_service_conf, NULL); |
3200 | 3200 | ||
3201 | connections_map = GNUNET_CONTAINER_multihashmap_create (65536); | 3201 | connections_map = GNUNET_CONTAINER_multihashmap_create (65536, GNUNET_NO); |
3202 | connections_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | 3202 | connections_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); |
3203 | mesh_handle | 3203 | mesh_handle |
3204 | = GNUNET_MESH_connect (cfg, NULL, | 3204 | = GNUNET_MESH_connect (cfg, NULL, |
diff --git a/src/fs/fs_api.c b/src/fs/fs_api.c index c99131d94..059c70ba6 100644 --- a/src/fs/fs_api.c +++ b/src/fs/fs_api.c | |||
@@ -2681,7 +2681,7 @@ deserialize_download (struct GNUNET_FS_Handle *h, | |||
2681 | } | 2681 | } |
2682 | dc->options = (enum GNUNET_FS_DownloadOptions) options; | 2682 | dc->options = (enum GNUNET_FS_DownloadOptions) options; |
2683 | dc->active = | 2683 | dc->active = |
2684 | GNUNET_CONTAINER_multihashmap_create (1 + 2 * (dc->length / DBLOCK_SIZE)); | 2684 | GNUNET_CONTAINER_multihashmap_create (1 + 2 * (dc->length / DBLOCK_SIZE), GNUNET_NO); |
2685 | dc->has_finished = (int) status; | 2685 | dc->has_finished = (int) status; |
2686 | dc->treedepth = | 2686 | dc->treedepth = |
2687 | GNUNET_FS_compute_depth (GNUNET_FS_uri_chk_get_file_size (dc->uri)); | 2687 | GNUNET_FS_compute_depth (GNUNET_FS_uri_chk_get_file_size (dc->uri)); |
@@ -2804,7 +2804,7 @@ deserialize_search (struct GNUNET_FS_Handle *h, | |||
2804 | goto cleanup; | 2804 | goto cleanup; |
2805 | } | 2805 | } |
2806 | sc->options = (enum GNUNET_FS_SearchOptions) options; | 2806 | sc->options = (enum GNUNET_FS_SearchOptions) options; |
2807 | sc->master_result_map = GNUNET_CONTAINER_multihashmap_create (16); | 2807 | sc->master_result_map = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_NO); |
2808 | dn = get_serialization_file_name_in_dir (h, | 2808 | dn = get_serialization_file_name_in_dir (h, |
2809 | (sc->psearch_result == | 2809 | (sc->psearch_result == |
2810 | NULL) ? | 2810 | NULL) ? |
diff --git a/src/fs/fs_download.c b/src/fs/fs_download.c index e9839cc2d..ecb5c5f8a 100644 --- a/src/fs/fs_download.c +++ b/src/fs/fs_download.c | |||
@@ -2101,7 +2101,7 @@ create_download_context (struct GNUNET_FS_Handle *h, | |||
2101 | dc->anonymity = anonymity; | 2101 | dc->anonymity = anonymity; |
2102 | dc->options = options; | 2102 | dc->options = options; |
2103 | dc->active = | 2103 | dc->active = |
2104 | GNUNET_CONTAINER_multihashmap_create (1 + 2 * (length / DBLOCK_SIZE)); | 2104 | GNUNET_CONTAINER_multihashmap_create (1 + 2 * (length / DBLOCK_SIZE), GNUNET_NO); |
2105 | dc->treedepth = | 2105 | dc->treedepth = |
2106 | GNUNET_FS_compute_depth (GNUNET_FS_uri_chk_get_file_size (dc->uri)); | 2106 | GNUNET_FS_compute_depth (GNUNET_FS_uri_chk_get_file_size (dc->uri)); |
2107 | if ((NULL == filename) && (is_recursive_download (dc))) | 2107 | if ((NULL == filename) && (is_recursive_download (dc))) |
diff --git a/src/fs/fs_namespace.c b/src/fs/fs_namespace.c index af1200dc4..eaff8a6d2 100644 --- a/src/fs/fs_namespace.c +++ b/src/fs/fs_namespace.c | |||
@@ -853,7 +853,8 @@ GNUNET_FS_namespace_list_updateable (struct GNUNET_FS_Namespace *ns, | |||
853 | ns->update_map = | 853 | ns->update_map = |
854 | GNUNET_CONTAINER_multihashmap_create (2 + | 854 | GNUNET_CONTAINER_multihashmap_create (2 + |
855 | 3 * ns->update_node_count / | 855 | 3 * ns->update_node_count / |
856 | 4); | 856 | 4, |
857 | GNUNET_NO); | ||
857 | for (i = 0; i < ns->update_node_count; i++) | 858 | for (i = 0; i < ns->update_node_count; i++) |
858 | { | 859 | { |
859 | nsn = ns->update_nodes[i]; | 860 | nsn = ns->update_nodes[i]; |
diff --git a/src/fs/fs_search.c b/src/fs/fs_search.c index a5b2d3643..370fd2f5c 100644 --- a/src/fs/fs_search.c +++ b/src/fs/fs_search.c | |||
@@ -1202,7 +1202,7 @@ search_start (struct GNUNET_FS_Handle *h, const struct GNUNET_FS_Uri *uri, | |||
1202 | sc->psearch_result = psearch; | 1202 | sc->psearch_result = psearch; |
1203 | psearch->update_search = sc; | 1203 | psearch->update_search = sc; |
1204 | } | 1204 | } |
1205 | sc->master_result_map = GNUNET_CONTAINER_multihashmap_create (16); | 1205 | sc->master_result_map = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_NO); |
1206 | sc->client_info = cctx; | 1206 | sc->client_info = cctx; |
1207 | if (GNUNET_OK != GNUNET_FS_search_start_searching_ (sc)) | 1207 | if (GNUNET_OK != GNUNET_FS_search_start_searching_ (sc)) |
1208 | { | 1208 | { |
@@ -1256,7 +1256,7 @@ GNUNET_FS_search_start_searching_ (struct GNUNET_FS_SearchContext *sc) | |||
1256 | sc->requests[i].mandatory = (sc->uri->data.ksk.keywords[i][0] == '+'); | 1256 | sc->requests[i].mandatory = (sc->uri->data.ksk.keywords[i][0] == '+'); |
1257 | if (sc->requests[i].mandatory) | 1257 | if (sc->requests[i].mandatory) |
1258 | sc->mandatory_count++; | 1258 | sc->mandatory_count++; |
1259 | sc->requests[i].results = GNUNET_CONTAINER_multihashmap_create (4); | 1259 | sc->requests[i].results = GNUNET_CONTAINER_multihashmap_create (4, GNUNET_NO); |
1260 | GNUNET_CRYPTO_hash (keyword, strlen (keyword), &sc->requests[i].key); | 1260 | GNUNET_CRYPTO_hash (keyword, strlen (keyword), &sc->requests[i].key); |
1261 | } | 1261 | } |
1262 | } | 1262 | } |
diff --git a/src/fs/fs_sharetree.c b/src/fs/fs_sharetree.c index f75571c46..5e96390ce 100644 --- a/src/fs/fs_sharetree.c +++ b/src/fs/fs_sharetree.c | |||
@@ -415,8 +415,8 @@ GNUNET_FS_share_tree_trim (struct GNUNET_FS_ShareTreeItem *toplevel) | |||
415 | 415 | ||
416 | if (toplevel == NULL) | 416 | if (toplevel == NULL) |
417 | return; | 417 | return; |
418 | tc.keywordcounter = GNUNET_CONTAINER_multihashmap_create (1024); | 418 | tc.keywordcounter = GNUNET_CONTAINER_multihashmap_create (1024, GNUNET_NO); |
419 | tc.metacounter = GNUNET_CONTAINER_multihashmap_create (1024); | 419 | tc.metacounter = GNUNET_CONTAINER_multihashmap_create (1024, GNUNET_NO); |
420 | share_tree_trim (&tc, toplevel); | 420 | share_tree_trim (&tc, toplevel); |
421 | GNUNET_CONTAINER_multihashmap_destroy (tc.keywordcounter); | 421 | GNUNET_CONTAINER_multihashmap_destroy (tc.keywordcounter); |
422 | GNUNET_CONTAINER_multihashmap_destroy (tc.metacounter); | 422 | GNUNET_CONTAINER_multihashmap_destroy (tc.metacounter); |
diff --git a/src/fs/gnunet-auto-share.c b/src/fs/gnunet-auto-share.c index 1a6e74b8c..886e0ba69 100644 --- a/src/fs/gnunet-auto-share.c +++ b/src/fs/gnunet-auto-share.c | |||
@@ -690,7 +690,7 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
690 | cfg_filename = GNUNET_strdup (cfgfile); | 690 | cfg_filename = GNUNET_strdup (cfgfile); |
691 | cfg = c; | 691 | cfg = c; |
692 | dir_name = args[0]; | 692 | dir_name = args[0]; |
693 | work_finished = GNUNET_CONTAINER_multihashmap_create (1024); | 693 | work_finished = GNUNET_CONTAINER_multihashmap_create (1024, GNUNET_NO); |
694 | load_state (); | 694 | load_state (); |
695 | run_task = GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE, | 695 | run_task = GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE, |
696 | &scan, NULL); | 696 | &scan, NULL); |
diff --git a/src/fs/gnunet-service-fs_cp.c b/src/fs/gnunet-service-fs_cp.c index 4ff6432b0..3de45ff48 100644 --- a/src/fs/gnunet-service-fs_cp.c +++ b/src/fs/gnunet-service-fs_cp.c | |||
@@ -615,7 +615,7 @@ GSF_peer_connect_handler_ (const struct GNUNET_PeerIdentity *peer, | |||
615 | (sizeof (respect) == GNUNET_DISK_fn_read (fn, &respect, sizeof (respect)))) | 615 | (sizeof (respect) == GNUNET_DISK_fn_read (fn, &respect, sizeof (respect)))) |
616 | cp->disk_respect = cp->ppd.respect = ntohl (respect); | 616 | cp->disk_respect = cp->ppd.respect = ntohl (respect); |
617 | GNUNET_free (fn); | 617 | GNUNET_free (fn); |
618 | cp->request_map = GNUNET_CONTAINER_multihashmap_create (128); | 618 | cp->request_map = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
619 | GNUNET_break (GNUNET_OK == | 619 | GNUNET_break (GNUNET_OK == |
620 | GNUNET_CONTAINER_multihashmap_put (cp_map, &peer->hashPubKey, | 620 | GNUNET_CONTAINER_multihashmap_put (cp_map, &peer->hashPubKey, |
621 | cp, | 621 | cp, |
@@ -1811,7 +1811,7 @@ cron_flush_respect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1811 | void | 1811 | void |
1812 | GSF_connected_peer_init_ () | 1812 | GSF_connected_peer_init_ () |
1813 | { | 1813 | { |
1814 | cp_map = GNUNET_CONTAINER_multihashmap_create (128); | 1814 | cp_map = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
1815 | ats = GNUNET_ATS_performance_init (GSF_cfg, NULL, NULL); | 1815 | ats = GNUNET_ATS_performance_init (GSF_cfg, NULL, NULL); |
1816 | GNUNET_assert (GNUNET_OK == | 1816 | GNUNET_assert (GNUNET_OK == |
1817 | GNUNET_CONFIGURATION_get_value_filename (GSF_cfg, "fs", | 1817 | GNUNET_CONFIGURATION_get_value_filename (GSF_cfg, "fs", |
diff --git a/src/fs/gnunet-service-fs_indexing.c b/src/fs/gnunet-service-fs_indexing.c index 7bd8316ab..1324b22d7 100644 --- a/src/fs/gnunet-service-fs_indexing.c +++ b/src/fs/gnunet-service-fs_indexing.c | |||
@@ -613,7 +613,7 @@ GNUNET_FS_indexing_init (const struct GNUNET_CONFIGURATION_Handle *c, | |||
613 | { | 613 | { |
614 | cfg = c; | 614 | cfg = c; |
615 | dsh = d; | 615 | dsh = d; |
616 | ifm = GNUNET_CONTAINER_multihashmap_create (128); | 616 | ifm = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
617 | read_index_list (); | 617 | read_index_list (); |
618 | return GNUNET_OK; | 618 | return GNUNET_OK; |
619 | } | 619 | } |
diff --git a/src/fs/gnunet-service-fs_pe.c b/src/fs/gnunet-service-fs_pe.c index dbaab7d48..bc08eebe7 100644 --- a/src/fs/gnunet-service-fs_pe.c +++ b/src/fs/gnunet-service-fs_pe.c | |||
@@ -572,7 +572,7 @@ GSF_plan_add_ (struct GSF_ConnectedPeer *cp, struct GSF_PendingRequest *pr) | |||
572 | if (NULL == pp) | 572 | if (NULL == pp) |
573 | { | 573 | { |
574 | pp = GNUNET_malloc (sizeof (struct PeerPlan)); | 574 | pp = GNUNET_malloc (sizeof (struct PeerPlan)); |
575 | pp->plan_map = GNUNET_CONTAINER_multihashmap_create (128); | 575 | pp->plan_map = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
576 | pp->priority_heap = | 576 | pp->priority_heap = |
577 | GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MAX); | 577 | GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MAX); |
578 | pp->delay_heap = | 578 | pp->delay_heap = |
@@ -760,7 +760,7 @@ GSF_plan_notify_request_done_ (struct GSF_PendingRequest *pr) | |||
760 | void | 760 | void |
761 | GSF_plan_init () | 761 | GSF_plan_init () |
762 | { | 762 | { |
763 | plans = GNUNET_CONTAINER_multihashmap_create (256); | 763 | plans = GNUNET_CONTAINER_multihashmap_create (256, GNUNET_NO); |
764 | } | 764 | } |
765 | 765 | ||
766 | 766 | ||
diff --git a/src/fs/gnunet-service-fs_pr.c b/src/fs/gnunet-service-fs_pr.c index ceb034ba0..265784348 100644 --- a/src/fs/gnunet-service-fs_pr.c +++ b/src/fs/gnunet-service-fs_pr.c | |||
@@ -1627,7 +1627,7 @@ GSF_pending_request_init_ () | |||
1627 | active_to_migration = | 1627 | active_to_migration = |
1628 | GNUNET_CONFIGURATION_get_value_yesno (GSF_cfg, "FS", "CONTENT_CACHING"); | 1628 | GNUNET_CONFIGURATION_get_value_yesno (GSF_cfg, "FS", "CONTENT_CACHING"); |
1629 | datastore_put_load = GNUNET_LOAD_value_init (DATASTORE_LOAD_AUTODECLINE); | 1629 | datastore_put_load = GNUNET_LOAD_value_init (DATASTORE_LOAD_AUTODECLINE); |
1630 | pr_map = GNUNET_CONTAINER_multihashmap_create (32 * 1024); | 1630 | pr_map = GNUNET_CONTAINER_multihashmap_create (32 * 1024, GNUNET_NO); |
1631 | requests_by_expiration_heap = | 1631 | requests_by_expiration_heap = |
1632 | GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | 1632 | GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); |
1633 | } | 1633 | } |
diff --git a/src/include/gnunet_container_lib.h b/src/include/gnunet_container_lib.h index 96946d02d..a476b7f1b 100644 --- a/src/include/gnunet_container_lib.h +++ b/src/include/gnunet_container_lib.h | |||
@@ -542,10 +542,20 @@ typedef int (*GNUNET_CONTAINER_HashMapIterator) (void *cls, | |||
542 | * Create a multi hash map. | 542 | * Create a multi hash map. |
543 | * | 543 | * |
544 | * @param len initial size (map will grow as needed) | 544 | * @param len initial size (map will grow as needed) |
545 | * @param do_not_copy_keys GNUNET_NO is always safe and should be used by default; | ||
546 | * GNUNET_YES means that on 'put', the 'key' does not have | ||
547 | * to be copied as the destination of the pointer is | ||
548 | * guaranteed to be life as long as the value is stored in | ||
549 | * the hashmap. This can significantly reduce memory | ||
550 | * consumption, but of course is also a recipie for | ||
551 | * heap corruption if the assumption is not true. Only | ||
552 | * use this if (1) memory use is important in this case and | ||
553 | * (2) you have triple-checked that the invariant holds | ||
545 | * @return NULL on error | 554 | * @return NULL on error |
546 | */ | 555 | */ |
547 | struct GNUNET_CONTAINER_MultiHashMap * | 556 | struct GNUNET_CONTAINER_MultiHashMap * |
548 | GNUNET_CONTAINER_multihashmap_create (unsigned int len); | 557 | GNUNET_CONTAINER_multihashmap_create (unsigned int len, |
558 | int do_not_copy_keys); | ||
549 | 559 | ||
550 | 560 | ||
551 | /** | 561 | /** |
diff --git a/src/integration-tests/connection_watchdog.c b/src/integration-tests/connection_watchdog.c index 456782ddd..17aab2159 100644 --- a/src/integration-tests/connection_watchdog.c +++ b/src/integration-tests/connection_watchdog.c | |||
@@ -1056,7 +1056,7 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
1056 | init(); | 1056 | init(); |
1057 | 1057 | ||
1058 | stats = GNUNET_STATISTICS_create ("watchdog", cfg); | 1058 | stats = GNUNET_STATISTICS_create ("watchdog", cfg); |
1059 | peers = GNUNET_CONTAINER_multihashmap_create (20); | 1059 | peers = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
1060 | 1060 | ||
1061 | th = GNUNET_TRANSPORT_connect(cfg, NULL, NULL, | 1061 | th = GNUNET_TRANSPORT_connect(cfg, NULL, NULL, |
1062 | &transport_notify_receive_cb, | 1062 | &transport_notify_receive_cb, |
diff --git a/src/lockmanager/gnunet-service-lockmanager.c b/src/lockmanager/gnunet-service-lockmanager.c index 296dd0065..4cb9ff2ae 100644 --- a/src/lockmanager/gnunet-service-lockmanager.c +++ b/src/lockmanager/gnunet-service-lockmanager.c | |||
@@ -821,7 +821,7 @@ lockmanager_run (void *cls, struct GNUNET_SERVER_Handle *server, | |||
821 | }; | 821 | }; |
822 | GNUNET_SERVER_add_handlers (server, message_handlers); | 822 | GNUNET_SERVER_add_handlers (server, message_handlers); |
823 | GNUNET_SERVER_disconnect_notify (server, &client_disconnect_cb, NULL); | 823 | GNUNET_SERVER_disconnect_notify (server, &client_disconnect_cb, NULL); |
824 | lock_map = GNUNET_CONTAINER_multihashmap_create (30); | 824 | lock_map = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
825 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, | 825 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, |
826 | NULL); | 826 | NULL); |
827 | } | 827 | } |
diff --git a/src/lockmanager/lockmanager_api.c b/src/lockmanager/lockmanager_api.c index 8adf486ee..3b9e70e59 100644 --- a/src/lockmanager/lockmanager_api.c +++ b/src/lockmanager/lockmanager_api.c | |||
@@ -567,7 +567,7 @@ GNUNET_LOCKMANAGER_connect (const struct GNUNET_CONFIGURATION_Handle *cfg) | |||
567 | LOG (GNUNET_ERROR_TYPE_DEBUG, "%s() END\n", __func__); | 567 | LOG (GNUNET_ERROR_TYPE_DEBUG, "%s() END\n", __func__); |
568 | return NULL; | 568 | return NULL; |
569 | } | 569 | } |
570 | h->hashmap = GNUNET_CONTAINER_multihashmap_create (15); | 570 | h->hashmap = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_NO); |
571 | GNUNET_assert (NULL != h->hashmap); | 571 | GNUNET_assert (NULL != h->hashmap); |
572 | h->in_replies = GNUNET_YES; | 572 | h->in_replies = GNUNET_YES; |
573 | GNUNET_CLIENT_receive (h->conn, &handle_replies, h, | 573 | GNUNET_CLIENT_receive (h->conn, &handle_replies, h, |
diff --git a/src/mesh/gnunet-service-mesh.c b/src/mesh/gnunet-service-mesh.c index a5068e86c..e75bad347 100644 --- a/src/mesh/gnunet-service-mesh.c +++ b/src/mesh/gnunet-service-mesh.c | |||
@@ -4354,7 +4354,7 @@ tunnel_new (GNUNET_PEER_Id owner, | |||
4354 | t->bck_ack = INITIAL_WINDOW_SIZE - 1; | 4354 | t->bck_ack = INITIAL_WINDOW_SIZE - 1; |
4355 | t->last_fwd_ack = INITIAL_WINDOW_SIZE - 1; | 4355 | t->last_fwd_ack = INITIAL_WINDOW_SIZE - 1; |
4356 | t->local_tid = local; | 4356 | t->local_tid = local; |
4357 | t->children_fc = GNUNET_CONTAINER_multihashmap_create (8); | 4357 | t->children_fc = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO); |
4358 | n_tunnels++; | 4358 | n_tunnels++; |
4359 | GNUNET_STATISTICS_update (stats, "# tunnels", 1, GNUNET_NO); | 4359 | GNUNET_STATISTICS_update (stats, "# tunnels", 1, GNUNET_NO); |
4360 | 4360 | ||
@@ -5286,7 +5286,7 @@ handle_mesh_path_create (void *cls, const struct GNUNET_PeerIdentity *peer, | |||
5286 | if (NULL == t->peers) | 5286 | if (NULL == t->peers) |
5287 | { | 5287 | { |
5288 | /* New tunnel! Notify clients on first payload message. */ | 5288 | /* New tunnel! Notify clients on first payload message. */ |
5289 | t->peers = GNUNET_CONTAINER_multihashmap_create (4); | 5289 | t->peers = GNUNET_CONTAINER_multihashmap_create (4, GNUNET_NO); |
5290 | } | 5290 | } |
5291 | GNUNET_break (GNUNET_SYSERR != | 5291 | GNUNET_break (GNUNET_SYSERR != |
5292 | GNUNET_CONTAINER_multihashmap_put (t->peers, | 5292 | GNUNET_CONTAINER_multihashmap_put (t->peers, |
@@ -6534,7 +6534,7 @@ handle_local_new_client (void *cls, struct GNUNET_SERVER_Client *client, | |||
6534 | GNUNET_MESH_ApplicationType at; | 6534 | GNUNET_MESH_ApplicationType at; |
6535 | struct GNUNET_HashCode hc; | 6535 | struct GNUNET_HashCode hc; |
6536 | 6536 | ||
6537 | c->apps = GNUNET_CONTAINER_multihashmap_create (napps); | 6537 | c->apps = GNUNET_CONTAINER_multihashmap_create (napps, GNUNET_NO); |
6538 | for (i = 0; i < napps; i++) | 6538 | for (i = 0; i < napps; i++) |
6539 | { | 6539 | { |
6540 | at = ntohl (a[i]); | 6540 | at = ntohl (a[i]); |
@@ -6558,7 +6558,7 @@ handle_local_new_client (void *cls, struct GNUNET_SERVER_Client *client, | |||
6558 | struct GNUNET_HashCode hc; | 6558 | struct GNUNET_HashCode hc; |
6559 | 6559 | ||
6560 | t = (uint16_t *) & a[napps]; | 6560 | t = (uint16_t *) & a[napps]; |
6561 | c->types = GNUNET_CONTAINER_multihashmap_create (ntypes); | 6561 | c->types = GNUNET_CONTAINER_multihashmap_create (ntypes, GNUNET_NO); |
6562 | for (i = 0; i < ntypes; i++) | 6562 | for (i = 0; i < ntypes; i++) |
6563 | { | 6563 | { |
6564 | u16 = ntohs (t[i]); | 6564 | u16 = ntohs (t[i]); |
@@ -6577,9 +6577,9 @@ handle_local_new_client (void *cls, struct GNUNET_SERVER_Client *client, | |||
6577 | " client has %u+%u subscriptions\n", napps, ntypes); | 6577 | " client has %u+%u subscriptions\n", napps, ntypes); |
6578 | 6578 | ||
6579 | GNUNET_CONTAINER_DLL_insert (clients, clients_tail, c); | 6579 | GNUNET_CONTAINER_DLL_insert (clients, clients_tail, c); |
6580 | c->own_tunnels = GNUNET_CONTAINER_multihashmap_create (32); | 6580 | c->own_tunnels = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
6581 | c->incoming_tunnels = GNUNET_CONTAINER_multihashmap_create (32); | 6581 | c->incoming_tunnels = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
6582 | c->ignore_tunnels = GNUNET_CONTAINER_multihashmap_create (32); | 6582 | c->ignore_tunnels = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
6583 | GNUNET_SERVER_notification_context_add (nc, client); | 6583 | GNUNET_SERVER_notification_context_add (nc, client); |
6584 | GNUNET_STATISTICS_update (stats, "# clients", 1, GNUNET_NO); | 6584 | GNUNET_STATISTICS_update (stats, "# clients", 1, GNUNET_NO); |
6585 | 6585 | ||
@@ -6697,7 +6697,7 @@ handle_local_tunnel_create (void *cls, struct GNUNET_SERVER_Client *client, | |||
6697 | next_tid = next_tid & ~GNUNET_MESH_LOCAL_TUNNEL_ID_CLI; | 6697 | next_tid = next_tid & ~GNUNET_MESH_LOCAL_TUNNEL_ID_CLI; |
6698 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "CREATED TUNNEL %s [%x] (%x)\n", | 6698 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "CREATED TUNNEL %s [%x] (%x)\n", |
6699 | GNUNET_i2s (&my_full_id), t->id.tid, t->local_tid); | 6699 | GNUNET_i2s (&my_full_id), t->id.tid, t->local_tid); |
6700 | t->peers = GNUNET_CONTAINER_multihashmap_create (32); | 6700 | t->peers = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
6701 | 6701 | ||
6702 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "new tunnel created\n"); | 6702 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "new tunnel created\n"); |
6703 | GNUNET_SERVER_receive_done (client, GNUNET_OK); | 6703 | GNUNET_SERVER_receive_done (client, GNUNET_OK); |
@@ -7370,8 +7370,8 @@ handle_local_connect_by_string (void *cls, struct GNUNET_SERVER_Client *client, | |||
7370 | info->description = GNUNET_malloc (len + 1); | 7370 | info->description = GNUNET_malloc (len + 1); |
7371 | memcpy (info->description, string, len); | 7371 | memcpy (info->description, string, len); |
7372 | info->description[len] = '\0'; | 7372 | info->description[len] = '\0'; |
7373 | info->dht_get_handles = GNUNET_CONTAINER_multihashmap_create(32); | 7373 | info->dht_get_handles = GNUNET_CONTAINER_multihashmap_create(32, GNUNET_NO); |
7374 | info->dht_get_results = GNUNET_CONTAINER_multihashmap_create(32); | 7374 | info->dht_get_results = GNUNET_CONTAINER_multihashmap_create(32, GNUNET_NO); |
7375 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " string: %s\n", info->description); | 7375 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " string: %s\n", info->description); |
7376 | 7376 | ||
7377 | ctx = GNUNET_malloc (sizeof (struct MeshRegexSearchContext)); | 7377 | ctx = GNUNET_malloc (sizeof (struct MeshRegexSearchContext)); |
@@ -8261,11 +8261,11 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, | |||
8261 | dht_replication_level = 10; | 8261 | dht_replication_level = 10; |
8262 | } | 8262 | } |
8263 | 8263 | ||
8264 | tunnels = GNUNET_CONTAINER_multihashmap_create (32); | 8264 | tunnels = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
8265 | incoming_tunnels = GNUNET_CONTAINER_multihashmap_create (32); | 8265 | incoming_tunnels = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
8266 | peers = GNUNET_CONTAINER_multihashmap_create (32); | 8266 | peers = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
8267 | applications = GNUNET_CONTAINER_multihashmap_create (32); | 8267 | applications = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
8268 | types = GNUNET_CONTAINER_multihashmap_create (32); | 8268 | types = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
8269 | 8269 | ||
8270 | dht_handle = GNUNET_DHT_connect (c, 64); | 8270 | dht_handle = GNUNET_DHT_connect (c, 64); |
8271 | if (NULL == dht_handle) | 8271 | if (NULL == dht_handle) |
diff --git a/src/mesh/mesh_tunnel_tree.c b/src/mesh/mesh_tunnel_tree.c index a754d9c42..b57f9410f 100644 --- a/src/mesh/mesh_tunnel_tree.c +++ b/src/mesh/mesh_tunnel_tree.c | |||
@@ -416,7 +416,7 @@ tree_new (GNUNET_PEER_Id peer) | |||
416 | struct MeshTunnelTree *tree; | 416 | struct MeshTunnelTree *tree; |
417 | 417 | ||
418 | tree = GNUNET_malloc (sizeof (struct MeshTunnelTree)); | 418 | tree = GNUNET_malloc (sizeof (struct MeshTunnelTree)); |
419 | tree->first_hops = GNUNET_CONTAINER_multihashmap_create (32); | 419 | tree->first_hops = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_NO); |
420 | tree->root = tree_node_new (NULL, peer); | 420 | tree->root = tree_node_new (NULL, peer); |
421 | tree->root->status = MESH_PEER_ROOT; | 421 | tree->root->status = MESH_PEER_ROOT; |
422 | 422 | ||
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c index bd32d7155..d13221600 100644 --- a/src/namestore/gnunet-service-namestore.c +++ b/src/namestore/gnunet-service-namestore.c | |||
@@ -2242,7 +2242,7 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, | |||
2242 | 2242 | ||
2243 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 2243 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
2244 | "Scanning directory `%s' for zone files\n", zonefile_directory); | 2244 | "Scanning directory `%s' for zone files\n", zonefile_directory); |
2245 | zonekeys = GNUNET_CONTAINER_multihashmap_create (16); | 2245 | zonekeys = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_NO); |
2246 | counter = 0; | 2246 | counter = 0; |
2247 | GNUNET_DISK_directory_scan (zonefile_directory, zonekey_file_it, &counter); | 2247 | GNUNET_DISK_directory_scan (zonefile_directory, zonekey_file_it, &counter); |
2248 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 2248 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
diff --git a/src/nse/gnunet-service-nse.c b/src/nse/gnunet-service-nse.c index 435f22774..d7fb439e2 100644 --- a/src/nse/gnunet-service-nse.c +++ b/src/nse/gnunet-service-nse.c | |||
@@ -1415,7 +1415,7 @@ key_generation_cb (void *cls, | |||
1415 | GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE, | 1415 | GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE, |
1416 | &find_proof, NULL); | 1416 | &find_proof, NULL); |
1417 | 1417 | ||
1418 | peers = GNUNET_CONTAINER_multihashmap_create (128); | 1418 | peers = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO); |
1419 | GNUNET_SERVER_add_handlers (srv, handlers); | 1419 | GNUNET_SERVER_add_handlers (srv, handlers); |
1420 | nc = GNUNET_SERVER_notification_context_create (srv, 1); | 1420 | nc = GNUNET_SERVER_notification_context_create (srv, 1); |
1421 | /* Connect to core service and register core handlers */ | 1421 | /* Connect to core service and register core handlers */ |
diff --git a/src/peerinfo/gnunet-service-peerinfo.c b/src/peerinfo/gnunet-service-peerinfo.c index 4b42708ab..18f10621a 100644 --- a/src/peerinfo/gnunet-service-peerinfo.c +++ b/src/peerinfo/gnunet-service-peerinfo.c | |||
@@ -268,7 +268,7 @@ add_host_to_known_hosts (const struct GNUNET_PeerIdentity *identity) | |||
268 | GNUNET_NO); | 268 | GNUNET_NO); |
269 | entry = GNUNET_malloc (sizeof (struct HostEntry)); | 269 | entry = GNUNET_malloc (sizeof (struct HostEntry)); |
270 | entry->identity = *identity; | 270 | entry->identity = *identity; |
271 | GNUNET_CONTAINER_multihashmap_put (hostmap, &identity->hashPubKey, entry, | 271 | GNUNET_CONTAINER_multihashmap_put (hostmap, &entry->identity.hashPubKey, entry, |
272 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); | 272 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); |
273 | fn = get_host_filename (identity); | 273 | fn = get_host_filename (identity); |
274 | entry->hello = read_host_file (fn, GNUNET_YES); | 274 | entry->hello = read_host_file (fn, GNUNET_YES); |
@@ -776,7 +776,7 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, | |||
776 | char *ip; | 776 | char *ip; |
777 | struct DirScanContext dsc; | 777 | struct DirScanContext dsc; |
778 | 778 | ||
779 | hostmap = GNUNET_CONTAINER_multihashmap_create (1024); | 779 | hostmap = GNUNET_CONTAINER_multihashmap_create (1024, GNUNET_YES); |
780 | stats = GNUNET_STATISTICS_create ("peerinfo", cfg); | 780 | stats = GNUNET_STATISTICS_create ("peerinfo", cfg); |
781 | notify_list = GNUNET_SERVER_notification_context_create (server, 0); | 781 | notify_list = GNUNET_SERVER_notification_context_create (server, 0); |
782 | GNUNET_assert (GNUNET_OK == | 782 | GNUNET_assert (GNUNET_OK == |
diff --git a/src/testbed/gnunet-service-testbed.c b/src/testbed/gnunet-service-testbed.c index 4cea07acd..b5282cffc 100644 --- a/src/testbed/gnunet-service-testbed.c +++ b/src/testbed/gnunet-service-testbed.c | |||
@@ -2916,7 +2916,7 @@ testbed_run (void *cls, struct GNUNET_SERVER_Handle *server, | |||
2916 | (cfg, "testbed", "HOSTNAME", &hostname)); | 2916 | (cfg, "testbed", "HOSTNAME", &hostname)); |
2917 | GNUNET_SERVER_add_handlers (server, message_handlers); | 2917 | GNUNET_SERVER_add_handlers (server, message_handlers); |
2918 | GNUNET_SERVER_disconnect_notify (server, &client_disconnect_cb, NULL); | 2918 | GNUNET_SERVER_disconnect_notify (server, &client_disconnect_cb, NULL); |
2919 | ss_map = GNUNET_CONTAINER_multihashmap_create (5); | 2919 | ss_map = GNUNET_CONTAINER_multihashmap_create (5, GNUNET_NO); |
2920 | shutdown_task_id = | 2920 | shutdown_task_id = |
2921 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, | 2921 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, |
2922 | &shutdown_task, NULL); | 2922 | &shutdown_task, NULL); |
diff --git a/src/testing_old/testing_group.c b/src/testing_old/testing_group.c index 9191b9fdd..f5c225876 100644 --- a/src/testing_old/testing_group.c +++ b/src/testing_old/testing_group.c | |||
@@ -3890,9 +3890,9 @@ GNUNET_TESTING_create_topology (struct GNUNET_TESTING_PeerGroup *pg, | |||
3890 | 3890 | ||
3891 | for (i = 0; i < pg->total; i++) | 3891 | for (i = 0; i < pg->total; i++) |
3892 | { | 3892 | { |
3893 | pg->peers[i].allowed_peers = GNUNET_CONTAINER_multihashmap_create (100); | 3893 | pg->peers[i].allowed_peers = GNUNET_CONTAINER_multihashmap_create (100, GNUNET_NO); |
3894 | pg->peers[i].connect_peers = GNUNET_CONTAINER_multihashmap_create (100); | 3894 | pg->peers[i].connect_peers = GNUNET_CONTAINER_multihashmap_create (100, GNUNET_NO); |
3895 | pg->peers[i].blacklisted_peers = GNUNET_CONTAINER_multihashmap_create (100); | 3895 | pg->peers[i].blacklisted_peers = GNUNET_CONTAINER_multihashmap_create (100, GNUNET_NO); |
3896 | pg->peers[i].pg = pg; | 3896 | pg->peers[i].pg = pg; |
3897 | } | 3897 | } |
3898 | #endif | 3898 | #endif |
@@ -4291,7 +4291,7 @@ choose_random_connections (struct GNUNET_TESTING_PeerGroup *pg, | |||
4291 | random_ctx.percentage = percentage; | 4291 | random_ctx.percentage = percentage; |
4292 | random_ctx.pg = pg; | 4292 | random_ctx.pg = pg; |
4293 | pg->peers[pg_iter].connect_peers_working_set = | 4293 | pg->peers[pg_iter].connect_peers_working_set = |
4294 | GNUNET_CONTAINER_multihashmap_create (pg->total); | 4294 | GNUNET_CONTAINER_multihashmap_create (pg->total, GNUNET_NO); |
4295 | GNUNET_CONTAINER_multihashmap_iterate (pg->peers[pg_iter].connect_peers, | 4295 | GNUNET_CONTAINER_multihashmap_iterate (pg->peers[pg_iter].connect_peers, |
4296 | &random_connect_iterator, | 4296 | &random_connect_iterator, |
4297 | &random_ctx); | 4297 | &random_ctx); |
@@ -4450,7 +4450,7 @@ choose_minimum (struct GNUNET_TESTING_PeerGroup *pg, unsigned int num) | |||
4450 | for (pg_iter = 0; pg_iter < pg->total; pg_iter++) | 4450 | for (pg_iter = 0; pg_iter < pg->total; pg_iter++) |
4451 | { | 4451 | { |
4452 | pg->peers[pg_iter].connect_peers_working_set = | 4452 | pg->peers[pg_iter].connect_peers_working_set = |
4453 | GNUNET_CONTAINER_multihashmap_create (num); | 4453 | GNUNET_CONTAINER_multihashmap_create (num, GNUNET_NO); |
4454 | } | 4454 | } |
4455 | 4455 | ||
4456 | for (pg_iter = 0; pg_iter < pg->total; pg_iter++) | 4456 | for (pg_iter = 0; pg_iter < pg->total; pg_iter++) |
@@ -4679,7 +4679,7 @@ perform_dfs (struct GNUNET_TESTING_PeerGroup *pg, unsigned int num) | |||
4679 | for (pg_iter = 0; pg_iter < pg->total; pg_iter++) | 4679 | for (pg_iter = 0; pg_iter < pg->total; pg_iter++) |
4680 | { | 4680 | { |
4681 | pg->peers[pg_iter].connect_peers_working_set = | 4681 | pg->peers[pg_iter].connect_peers_working_set = |
4682 | GNUNET_CONTAINER_multihashmap_create (num); | 4682 | GNUNET_CONTAINER_multihashmap_create (num, GNUNET_NO); |
4683 | } | 4683 | } |
4684 | 4684 | ||
4685 | starting_peer = 0; | 4685 | starting_peer = 0; |
diff --git a/src/topology/gnunet-daemon-topology.c b/src/topology/gnunet-daemon-topology.c index 9bd6d8e19..2dc3c148b 100644 --- a/src/topology/gnunet-daemon-topology.c +++ b/src/topology/gnunet-daemon-topology.c | |||
@@ -1306,7 +1306,7 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
1306 | "TARGET-CONNECTION-COUNT", &opt)) | 1306 | "TARGET-CONNECTION-COUNT", &opt)) |
1307 | opt = 16; | 1307 | opt = 16; |
1308 | target_connection_count = (unsigned int) opt; | 1308 | target_connection_count = (unsigned int) opt; |
1309 | peers = GNUNET_CONTAINER_multihashmap_create (target_connection_count * 2); | 1309 | peers = GNUNET_CONTAINER_multihashmap_create (target_connection_count * 2, GNUNET_NO); |
1310 | 1310 | ||
1311 | if ((friends_only == GNUNET_YES) || (minimum_friend_count > 0)) | 1311 | if ((friends_only == GNUNET_YES) || (minimum_friend_count > 0)) |
1312 | read_friends_file (cfg); | 1312 | read_friends_file (cfg); |
diff --git a/src/transport/gnunet-service-transport_blacklist.c b/src/transport/gnunet-service-transport_blacklist.c index 505326879..e426b8fd2 100644 --- a/src/transport/gnunet-service-transport_blacklist.c +++ b/src/transport/gnunet-service-transport_blacklist.c | |||
@@ -687,7 +687,8 @@ GST_blacklist_add_peer (const struct GNUNET_PeerIdentity *peer, | |||
687 | GNUNET_i2s (peer), transport_name); | 687 | GNUNET_i2s (peer), transport_name); |
688 | if (blacklist == NULL) | 688 | if (blacklist == NULL) |
689 | blacklist = | 689 | blacklist = |
690 | GNUNET_CONTAINER_multihashmap_create (TRANSPORT_BLACKLIST_HT_SIZE); | 690 | GNUNET_CONTAINER_multihashmap_create (TRANSPORT_BLACKLIST_HT_SIZE, |
691 | GNUNET_NO); | ||
691 | GNUNET_CONTAINER_multihashmap_put (blacklist, &peer->hashPubKey, | 692 | GNUNET_CONTAINER_multihashmap_put (blacklist, &peer->hashPubKey, |
692 | GNUNET_strdup (transport_name), | 693 | GNUNET_strdup (transport_name), |
693 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 694 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
diff --git a/src/transport/gnunet-service-transport_neighbours.c b/src/transport/gnunet-service-transport_neighbours.c index dd506b125..da42b8c56 100644 --- a/src/transport/gnunet-service-transport_neighbours.c +++ b/src/transport/gnunet-service-transport_neighbours.c | |||
@@ -3197,7 +3197,7 @@ GST_neighbours_start (void *cls, | |||
3197 | connect_notify_cb = connect_cb; | 3197 | connect_notify_cb = connect_cb; |
3198 | disconnect_notify_cb = disconnect_cb; | 3198 | disconnect_notify_cb = disconnect_cb; |
3199 | address_change_cb = peer_address_cb; | 3199 | address_change_cb = peer_address_cb; |
3200 | neighbours = GNUNET_CONTAINER_multihashmap_create (NEIGHBOUR_TABLE_SIZE); | 3200 | neighbours = GNUNET_CONTAINER_multihashmap_create (NEIGHBOUR_TABLE_SIZE, GNUNET_NO); |
3201 | } | 3201 | } |
3202 | 3202 | ||
3203 | 3203 | ||
diff --git a/src/transport/gnunet-service-transport_validation.c b/src/transport/gnunet-service-transport_validation.c index 59fe1737f..ab334013d 100644 --- a/src/transport/gnunet-service-transport_validation.c +++ b/src/transport/gnunet-service-transport_validation.c | |||
@@ -696,7 +696,8 @@ process_peerinfo_hello (void *cls, const struct GNUNET_PeerIdentity *peer, | |||
696 | void | 696 | void |
697 | GST_validation_start () | 697 | GST_validation_start () |
698 | { | 698 | { |
699 | validation_map = GNUNET_CONTAINER_multihashmap_create (VALIDATION_MAP_SIZE); | 699 | validation_map = GNUNET_CONTAINER_multihashmap_create (VALIDATION_MAP_SIZE, |
700 | GNUNET_NO); | ||
700 | pnc = GNUNET_PEERINFO_notify (GST_cfg, &process_peerinfo_hello, NULL); | 701 | pnc = GNUNET_PEERINFO_notify (GST_cfg, &process_peerinfo_hello, NULL); |
701 | } | 702 | } |
702 | 703 | ||
diff --git a/src/transport/gnunet-transport.c b/src/transport/gnunet-transport.c index 217fbf51f..5978de6bb 100644 --- a/src/transport/gnunet-transport.c +++ b/src/transport/gnunet-transport.c | |||
@@ -655,7 +655,7 @@ testservice_task (void *cls, | |||
655 | } | 655 | } |
656 | if (iterate_connections) | 656 | if (iterate_connections) |
657 | { | 657 | { |
658 | peers = GNUNET_CONTAINER_multihashmap_create (20); | 658 | peers = GNUNET_CONTAINER_multihashmap_create (20, GNUNET_NO); |
659 | GNUNET_TRANSPORT_peer_get_active_addresses (cfg, NULL, GNUNET_YES, | 659 | GNUNET_TRANSPORT_peer_get_active_addresses (cfg, NULL, GNUNET_YES, |
660 | TIMEOUT, | 660 | TIMEOUT, |
661 | &process_address, (void *) cfg); | 661 | &process_address, (void *) cfg); |
diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c index 9d23c5121..877356c16 100644 --- a/src/transport/plugin_transport_tcp.c +++ b/src/transport/plugin_transport_tcp.c | |||
@@ -734,7 +734,7 @@ static struct Session * | |||
734 | create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target, | 734 | create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target, |
735 | struct GNUNET_SERVER_Client *client, int is_nat) | 735 | struct GNUNET_SERVER_Client *client, int is_nat) |
736 | { | 736 | { |
737 | struct Session *ret; | 737 | struct Session *session; |
738 | struct PendingMessage *pm; | 738 | struct PendingMessage *pm; |
739 | struct WelcomeMessage welcome; | 739 | struct WelcomeMessage welcome; |
740 | 740 | ||
@@ -746,14 +746,14 @@ create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target, | |||
746 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 746 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
747 | "Creating new session for peer `%4s'\n", | 747 | "Creating new session for peer `%4s'\n", |
748 | GNUNET_i2s (target)); | 748 | GNUNET_i2s (target)); |
749 | ret = GNUNET_malloc (sizeof (struct Session)); | 749 | session = GNUNET_malloc (sizeof (struct Session)); |
750 | ret->last_activity = GNUNET_TIME_absolute_get (); | 750 | session->last_activity = GNUNET_TIME_absolute_get (); |
751 | ret->plugin = plugin; | 751 | session->plugin = plugin; |
752 | ret->is_nat = is_nat; | 752 | session->is_nat = is_nat; |
753 | ret->client = client; | 753 | session->client = client; |
754 | ret->target = *target; | 754 | session->target = *target; |
755 | ret->expecting_welcome = GNUNET_YES; | 755 | session->expecting_welcome = GNUNET_YES; |
756 | ret->ats_address_network_type = htonl (GNUNET_ATS_NET_UNSPECIFIED); | 756 | session->ats_address_network_type = htonl (GNUNET_ATS_NET_UNSPECIFIED); |
757 | pm = GNUNET_malloc (sizeof (struct PendingMessage) + | 757 | pm = GNUNET_malloc (sizeof (struct PendingMessage) + |
758 | sizeof (struct WelcomeMessage)); | 758 | sizeof (struct WelcomeMessage)); |
759 | pm->msg = (const char *) &pm[1]; | 759 | pm->msg = (const char *) &pm[1]; |
@@ -766,17 +766,17 @@ create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target, | |||
766 | GNUNET_STATISTICS_update (plugin->env->stats, | 766 | GNUNET_STATISTICS_update (plugin->env->stats, |
767 | gettext_noop ("# bytes currently in TCP buffers"), | 767 | gettext_noop ("# bytes currently in TCP buffers"), |
768 | pm->message_size, GNUNET_NO); | 768 | pm->message_size, GNUNET_NO); |
769 | GNUNET_CONTAINER_DLL_insert (ret->pending_messages_head, | 769 | GNUNET_CONTAINER_DLL_insert (session->pending_messages_head, |
770 | ret->pending_messages_tail, pm); | 770 | session->pending_messages_tail, pm); |
771 | if (GNUNET_YES != is_nat) | 771 | if (GNUNET_YES != is_nat) |
772 | { | 772 | { |
773 | GNUNET_STATISTICS_update (plugin->env->stats, | 773 | GNUNET_STATISTICS_update (plugin->env->stats, |
774 | gettext_noop ("# TCP sessions active"), 1, | 774 | gettext_noop ("# TCP sessions active"), 1, |
775 | GNUNET_NO); | 775 | GNUNET_NO); |
776 | } | 776 | } |
777 | start_session_timeout (ret); | 777 | start_session_timeout (session); |
778 | 778 | ||
779 | return ret; | 779 | return session; |
780 | } | 780 | } |
781 | 781 | ||
782 | 782 | ||
@@ -1120,7 +1120,9 @@ tcp_plugin_send (void *cls, | |||
1120 | "Asked to transmit %u bytes to `%s', added message to list.\n", | 1120 | "Asked to transmit %u bytes to `%s', added message to list.\n", |
1121 | msgbuf_size, GNUNET_i2s (&session->target)); | 1121 | msgbuf_size, GNUNET_i2s (&session->target)); |
1122 | 1122 | ||
1123 | if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains_value(plugin->sessionmap, &session->target.hashPubKey, session)) | 1123 | if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains_value (plugin->sessionmap, |
1124 | &session->target.hashPubKey, | ||
1125 | session)) | ||
1124 | { | 1126 | { |
1125 | GNUNET_assert (session->client != NULL); | 1127 | GNUNET_assert (session->client != NULL); |
1126 | reschedule_session_timeout (session); | 1128 | reschedule_session_timeout (session); |
@@ -1246,8 +1248,8 @@ static struct Session * | |||
1246 | tcp_plugin_get_session (void *cls, | 1248 | tcp_plugin_get_session (void *cls, |
1247 | const struct GNUNET_HELLO_Address *address) | 1249 | const struct GNUNET_HELLO_Address *address) |
1248 | { | 1250 | { |
1249 | struct Plugin * plugin = cls; | 1251 | struct Plugin *plugin = cls; |
1250 | struct Session * session = NULL; | 1252 | struct Session *session = NULL; |
1251 | int af; | 1253 | int af; |
1252 | const void *sb; | 1254 | const void *sb; |
1253 | size_t sbs; | 1255 | size_t sbs; |
@@ -1270,7 +1272,8 @@ tcp_plugin_get_session (void *cls, | |||
1270 | 1272 | ||
1271 | /* look for existing session */ | 1273 | /* look for existing session */ |
1272 | if (GNUNET_YES == | 1274 | if (GNUNET_YES == |
1273 | GNUNET_CONTAINER_multihashmap_contains(plugin->sessionmap, &address->peer.hashPubKey)) | 1275 | GNUNET_CONTAINER_multihashmap_contains (plugin->sessionmap, |
1276 | &address->peer.hashPubKey)) | ||
1274 | { | 1277 | { |
1275 | struct SessionItCtx si_ctx; | 1278 | struct SessionItCtx si_ctx; |
1276 | 1279 | ||
@@ -1279,7 +1282,9 @@ tcp_plugin_get_session (void *cls, | |||
1279 | 1282 | ||
1280 | si_ctx.result = NULL; | 1283 | si_ctx.result = NULL; |
1281 | 1284 | ||
1282 | GNUNET_CONTAINER_multihashmap_get_multiple(plugin->sessionmap, &address->peer.hashPubKey, &session_lookup_it, &si_ctx); | 1285 | GNUNET_CONTAINER_multihashmap_get_multiple (plugin->sessionmap, |
1286 | &address->peer.hashPubKey, | ||
1287 | &session_lookup_it, &si_ctx); | ||
1283 | if (si_ctx.result != NULL) | 1288 | if (si_ctx.result != NULL) |
1284 | { | 1289 | { |
1285 | session = si_ctx.result; | 1290 | session = si_ctx.result; |
@@ -1372,13 +1377,15 @@ tcp_plugin_get_session (void *cls, | |||
1372 | session->addrlen = 0; | 1377 | session->addrlen = 0; |
1373 | session->addr = NULL; | 1378 | session->addr = NULL; |
1374 | session->ats_address_network_type = ats.value; | 1379 | session->ats_address_network_type = ats.value; |
1375 | session->nat_connection_timeout = GNUNET_SCHEDULER_add_delayed(NAT_TIMEOUT, | 1380 | session->nat_connection_timeout = GNUNET_SCHEDULER_add_delayed (NAT_TIMEOUT, |
1376 | &nat_connect_timeout, | 1381 | &nat_connect_timeout, |
1377 | session); | 1382 | session); |
1378 | GNUNET_assert (session != NULL); | 1383 | GNUNET_assert (session != NULL); |
1379 | GNUNET_assert (GNUNET_CONTAINER_multihashmap_put | 1384 | GNUNET_assert (GNUNET_OK == |
1380 | (plugin->nat_wait_conns, &address->peer.hashPubKey, session, | 1385 | GNUNET_CONTAINER_multihashmap_put (plugin->nat_wait_conns, |
1381 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY) == GNUNET_OK); | 1386 | &session->target.hashPubKey, |
1387 | session, | ||
1388 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); | ||
1382 | 1389 | ||
1383 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 1390 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
1384 | "Created NAT WAIT connection to `%4s' at `%s'\n", | 1391 | "Created NAT WAIT connection to `%4s' at `%s'\n", |
@@ -1421,7 +1428,9 @@ tcp_plugin_get_session (void *cls, | |||
1421 | session->addrlen = addrlen; | 1428 | session->addrlen = addrlen; |
1422 | session->ats_address_network_type = ats.value; | 1429 | session->ats_address_network_type = ats.value; |
1423 | 1430 | ||
1424 | GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &address->peer.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 1431 | GNUNET_CONTAINER_multihashmap_put (plugin->sessionmap, |
1432 | &session->target.hashPubKey, | ||
1433 | session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | ||
1425 | inc_sessions (plugin, session, __LINE__); | 1434 | inc_sessions (plugin, session, __LINE__); |
1426 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 1435 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
1427 | "Creating new session for `%s' address `%s' session %p\n", | 1436 | "Creating new session for `%s' address `%s' session %p\n", |
@@ -1763,9 +1772,9 @@ handle_tcp_nat_probe (void *cls, struct GNUNET_SERVER_Client *client, | |||
1763 | (plugin->nat_wait_conns, | 1772 | (plugin->nat_wait_conns, |
1764 | &tcp_nat_probe->clientIdentity.hashPubKey, | 1773 | &tcp_nat_probe->clientIdentity.hashPubKey, |
1765 | session) == GNUNET_YES); | 1774 | session) == GNUNET_YES); |
1766 | GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, | 1775 | GNUNET_CONTAINER_multihashmap_put (plugin->sessionmap, |
1767 | &session->target.hashPubKey, session, | 1776 | &session->target.hashPubKey, session, |
1768 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 1777 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); |
1769 | session->last_activity = GNUNET_TIME_absolute_get (); | 1778 | session->last_activity = GNUNET_TIME_absolute_get (); |
1770 | session->inbound = GNUNET_NO; | 1779 | session->inbound = GNUNET_NO; |
1771 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 1780 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
@@ -1896,7 +1905,10 @@ handle_tcp_welcome (void *cls, struct GNUNET_SERVER_Client *client, | |||
1896 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 1905 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
1897 | "Did not obtain TCP socket address for incoming connection\n"); | 1906 | "Did not obtain TCP socket address for incoming connection\n"); |
1898 | } | 1907 | } |
1899 | GNUNET_CONTAINER_multihashmap_put(plugin->sessionmap, &wm->clientIdentity.hashPubKey, session, GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | 1908 | GNUNET_CONTAINER_multihashmap_put (plugin->sessionmap, |
1909 | &session->target.hashPubKey, | ||
1910 | session, | ||
1911 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE); | ||
1900 | inc_sessions (plugin, session, __LINE__); | 1912 | inc_sessions (plugin, session, __LINE__); |
1901 | } | 1913 | } |
1902 | 1914 | ||
@@ -2332,7 +2344,7 @@ libgnunet_plugin_transport_tcp_init (void *cls) | |||
2332 | service = NULL; | 2344 | service = NULL; |
2333 | 2345 | ||
2334 | plugin = GNUNET_malloc (sizeof (struct Plugin)); | 2346 | plugin = GNUNET_malloc (sizeof (struct Plugin)); |
2335 | plugin->sessionmap = GNUNET_CONTAINER_multihashmap_create(max_connections); | 2347 | plugin->sessionmap = GNUNET_CONTAINER_multihashmap_create (max_connections, GNUNET_YES); |
2336 | plugin->max_connections = max_connections; | 2348 | plugin->max_connections = max_connections; |
2337 | plugin->open_port = bport; | 2349 | plugin->open_port = bport; |
2338 | plugin->adv_port = aport; | 2350 | plugin->adv_port = aport; |
@@ -2405,7 +2417,7 @@ libgnunet_plugin_transport_tcp_init (void *cls) | |||
2405 | plugin->handlers[i].callback_cls = plugin; | 2417 | plugin->handlers[i].callback_cls = plugin; |
2406 | GNUNET_SERVER_add_handlers (plugin->server, plugin->handlers); | 2418 | GNUNET_SERVER_add_handlers (plugin->server, plugin->handlers); |
2407 | GNUNET_SERVER_disconnect_notify (plugin->server, &disconnect_notify, plugin); | 2419 | GNUNET_SERVER_disconnect_notify (plugin->server, &disconnect_notify, plugin); |
2408 | plugin->nat_wait_conns = GNUNET_CONTAINER_multihashmap_create (16); | 2420 | plugin->nat_wait_conns = GNUNET_CONTAINER_multihashmap_create (16, GNUNET_YES); |
2409 | if (bport != 0) | 2421 | if (bport != 0) |
2410 | LOG (GNUNET_ERROR_TYPE_INFO, | 2422 | LOG (GNUNET_ERROR_TYPE_INFO, |
2411 | _("TCP transport listening on port %llu\n"), bport); | 2423 | _("TCP transport listening on port %llu\n"), bport); |
diff --git a/src/transport/plugin_transport_udp.c b/src/transport/plugin_transport_udp.c index 1520bf284..bf8220164 100644 --- a/src/transport/plugin_transport_udp.c +++ b/src/transport/plugin_transport_udp.c | |||
@@ -2348,7 +2348,7 @@ libgnunet_plugin_transport_udp_init (void *cls) | |||
2348 | 2348 | ||
2349 | GNUNET_BANDWIDTH_tracker_init (&p->tracker, | 2349 | GNUNET_BANDWIDTH_tracker_init (&p->tracker, |
2350 | GNUNET_BANDWIDTH_value_init ((uint32_t)udp_max_bps), 30); | 2350 | GNUNET_BANDWIDTH_value_init ((uint32_t)udp_max_bps), 30); |
2351 | p->sessions = GNUNET_CONTAINER_multihashmap_create (10); | 2351 | p->sessions = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO); |
2352 | p->defrag_ctxs = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | 2352 | p->defrag_ctxs = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); |
2353 | p->mst = GNUNET_SERVER_mst_create (&process_inbound_tokenized_messages, p); | 2353 | p->mst = GNUNET_SERVER_mst_create (&process_inbound_tokenized_messages, p); |
2354 | p->port = port; | 2354 | p->port = port; |
diff --git a/src/transport/plugin_transport_unix.c b/src/transport/plugin_transport_unix.c index c688039e6..fc1556591 100644 --- a/src/transport/plugin_transport_unix.c +++ b/src/transport/plugin_transport_unix.c | |||
@@ -1354,7 +1354,7 @@ libgnunet_plugin_transport_unix_init (void *cls) | |||
1354 | if (sockets_created == 0) | 1354 | if (sockets_created == 0) |
1355 | LOG (GNUNET_ERROR_TYPE_WARNING, _("Failed to open UNIX sockets\n")); | 1355 | LOG (GNUNET_ERROR_TYPE_WARNING, _("Failed to open UNIX sockets\n")); |
1356 | 1356 | ||
1357 | plugin->session_map = GNUNET_CONTAINER_multihashmap_create(10); | 1357 | plugin->session_map = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_NO); |
1358 | 1358 | ||
1359 | GNUNET_SCHEDULER_add_now (address_notification, plugin); | 1359 | GNUNET_SCHEDULER_add_now (address_notification, plugin); |
1360 | return api; | 1360 | return api; |
diff --git a/src/transport/transport_api.c b/src/transport/transport_api.c index 2d4890db9..7fef0cf3e 100644 --- a/src/transport/transport_api.c +++ b/src/transport/transport_api.c | |||
@@ -353,7 +353,7 @@ neighbour_add (struct GNUNET_TRANSPORT_Handle *h, | |||
353 | MAX_BANDWIDTH_CARRY_S); | 353 | MAX_BANDWIDTH_CARRY_S); |
354 | GNUNET_assert (GNUNET_OK == | 354 | GNUNET_assert (GNUNET_OK == |
355 | GNUNET_CONTAINER_multihashmap_put (h->neighbours, | 355 | GNUNET_CONTAINER_multihashmap_put (h->neighbours, |
356 | &pid->hashPubKey, n, | 356 | &n->id.hashPubKey, n, |
357 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); | 357 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); |
358 | return n; | 358 | return n; |
359 | } | 359 | } |
@@ -1191,7 +1191,7 @@ GNUNET_TRANSPORT_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
1191 | ret->nd_cb = nd; | 1191 | ret->nd_cb = nd; |
1192 | ret->reconnect_delay = GNUNET_TIME_UNIT_ZERO; | 1192 | ret->reconnect_delay = GNUNET_TIME_UNIT_ZERO; |
1193 | ret->neighbours = | 1193 | ret->neighbours = |
1194 | GNUNET_CONTAINER_multihashmap_create (STARTING_NEIGHBOURS_SIZE); | 1194 | GNUNET_CONTAINER_multihashmap_create (STARTING_NEIGHBOURS_SIZE, GNUNET_YES); |
1195 | ret->ready_heap = | 1195 | ret->ready_heap = |
1196 | GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | 1196 | GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); |
1197 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Connecting to transport service.\n"); | 1197 | LOG (GNUNET_ERROR_TYPE_DEBUG, "Connecting to transport service.\n"); |
diff --git a/src/util/container_multihashmap.c b/src/util/container_multihashmap.c index ada98251c..4a41fd015 100644 --- a/src/util/container_multihashmap.c +++ b/src/util/container_multihashmap.c | |||
@@ -80,10 +80,20 @@ struct GNUNET_CONTAINER_MultiHashMap | |||
80 | * Create a multi hash map. | 80 | * Create a multi hash map. |
81 | * | 81 | * |
82 | * @param len initial size (map will grow as needed) | 82 | * @param len initial size (map will grow as needed) |
83 | * @param do_not_copy_keys GNUNET_NO is always safe and should be used by default; | ||
84 | * GNUNET_YES means that on 'put', the 'key' does not have | ||
85 | * to be copied as the destination of the pointer is | ||
86 | * guaranteed to be life as long as the value is stored in | ||
87 | * the hashmap. This can significantly reduce memory | ||
88 | * consumption, but of course is also a recipie for | ||
89 | * heap corruption if the assumption is not true. Only | ||
90 | * use this if (1) memory use is important in this case and | ||
91 | * (2) you have triple-checked that the invariant holds | ||
83 | * @return NULL on error | 92 | * @return NULL on error |
84 | */ | 93 | */ |
85 | struct GNUNET_CONTAINER_MultiHashMap * | 94 | struct GNUNET_CONTAINER_MultiHashMap * |
86 | GNUNET_CONTAINER_multihashmap_create (unsigned int len) | 95 | GNUNET_CONTAINER_multihashmap_create (unsigned int len, |
96 | int do_not_copy_keys) | ||
87 | { | 97 | { |
88 | struct GNUNET_CONTAINER_MultiHashMap *ret; | 98 | struct GNUNET_CONTAINER_MultiHashMap *ret; |
89 | 99 | ||
diff --git a/src/util/peer.c b/src/util/peer.c index 2444cb9f8..a0e965605 100644 --- a/src/util/peer.c +++ b/src/util/peer.c | |||
@@ -117,7 +117,7 @@ GNUNET_PEER_intern (const struct GNUNET_PeerIdentity *pid) | |||
117 | if (pid == NULL) | 117 | if (pid == NULL) |
118 | return 0; | 118 | return 0; |
119 | if (NULL == map) | 119 | if (NULL == map) |
120 | map = GNUNET_CONTAINER_multihashmap_create (32); | 120 | map = GNUNET_CONTAINER_multihashmap_create (32, GNUNET_YES); |
121 | off = (long) GNUNET_CONTAINER_multihashmap_get (map, &pid->hashPubKey); | 121 | off = (long) GNUNET_CONTAINER_multihashmap_get (map, &pid->hashPubKey); |
122 | e = (off == 0) ? NULL : &table[off]; | 122 | e = (off == 0) ? NULL : &table[off]; |
123 | if (e != NULL) | 123 | if (e != NULL) |
@@ -146,7 +146,7 @@ GNUNET_PEER_intern (const struct GNUNET_PeerIdentity *pid) | |||
146 | table[ret].rc = 1; | 146 | table[ret].rc = 1; |
147 | table[ret].pid = ret; | 147 | table[ret].pid = ret; |
148 | GNUNET_break (GNUNET_OK == | 148 | GNUNET_break (GNUNET_OK == |
149 | GNUNET_CONTAINER_multihashmap_put (map, &pid->hashPubKey, | 149 | GNUNET_CONTAINER_multihashmap_put (map, &table[ret].id.hashPubKey, |
150 | (void *) (long) ret, | 150 | (void *) (long) ret, |
151 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); | 151 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY)); |
152 | return ret; | 152 | return ret; |
diff --git a/src/util/test_container_multihashmap.c b/src/util/test_container_multihashmap.c index befd0ce46..ff50df117 100644 --- a/src/util/test_container_multihashmap.c +++ b/src/util/test_container_multihashmap.c | |||
@@ -40,7 +40,7 @@ testMap (int i) | |||
40 | const char *ret; | 40 | const char *ret; |
41 | int j; | 41 | int j; |
42 | 42 | ||
43 | CHECK (NULL != (m = GNUNET_CONTAINER_multihashmap_create (i))); | 43 | CHECK (NULL != (m = GNUNET_CONTAINER_multihashmap_create (i, GNUNET_NO))); |
44 | memset (&k1, 0, sizeof (k1)); | 44 | memset (&k1, 0, sizeof (k1)); |
45 | memset (&k2, 1, sizeof (k2)); | 45 | memset (&k2, 1, sizeof (k2)); |
46 | CHECK (GNUNET_NO == GNUNET_CONTAINER_multihashmap_contains (m, &k1)); | 46 | CHECK (GNUNET_NO == GNUNET_CONTAINER_multihashmap_contains (m, &k1)); |
diff --git a/src/vpn/gnunet-service-vpn.c b/src/vpn/gnunet-service-vpn.c index 48de1de46..5a52a6cda 100644 --- a/src/vpn/gnunet-service-vpn.c +++ b/src/vpn/gnunet-service-vpn.c | |||
@@ -3084,9 +3084,9 @@ run (void *cls, | |||
3084 | &max_tunnel_mappings)) | 3084 | &max_tunnel_mappings)) |
3085 | max_tunnel_mappings = 200; | 3085 | max_tunnel_mappings = 200; |
3086 | 3086 | ||
3087 | destination_map = GNUNET_CONTAINER_multihashmap_create (max_destination_mappings * 2); | 3087 | destination_map = GNUNET_CONTAINER_multihashmap_create (max_destination_mappings * 2, GNUNET_NO); |
3088 | destination_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | 3088 | destination_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); |
3089 | tunnel_map = GNUNET_CONTAINER_multihashmap_create (max_tunnel_mappings * 2); | 3089 | tunnel_map = GNUNET_CONTAINER_multihashmap_create (max_tunnel_mappings * 2, GNUNET_NO); |
3090 | tunnel_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | 3090 | tunnel_heap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); |
3091 | 3091 | ||
3092 | 3092 | ||