diff options
author | Marcello Stanisci <marcello.stanisci@inria.fr> | 2016-09-23 18:05:38 +0200 |
---|---|---|
committer | Marcello Stanisci <marcello.stanisci@inria.fr> | 2016-09-23 18:05:38 +0200 |
commit | 2624d93cff06eaf31db5df7020cd6d751a591cd7 (patch) | |
tree | f5e58e807f8b35f39476540e0cf46983995ee7a7 | |
parent | 12c2c08fc846ef55758601b8141fa457d7094d0e (diff) | |
download | merchant-2624d93cff06eaf31db5df7020cd6d751a591cd7.tar.gz merchant-2624d93cff06eaf31db5df7020cd6d751a591cd7.tar.bz2 merchant-2624d93cff06eaf31db5df7020cd6d751a591cd7.zip |
making get_instance hashmap based
-rw-r--r-- | src/backend/taler-merchant-httpd.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/backend/taler-merchant-httpd.c b/src/backend/taler-merchant-httpd.c index 7f71eb4d..2fd14e88 100644 --- a/src/backend/taler-merchant-httpd.c +++ b/src/backend/taler-merchant-httpd.c @@ -264,6 +264,12 @@ do_shutdown (void *cls) } TMH_EXCHANGES_done (); TMH_AUDITORS_done (); + + if (NULL != by_id_map) + GNUNET_CONTAINER_multihashmap_destroy (by_id_map); + if (NULL != by_kpub_map) + GNUNET_CONTAINER_multihashmap_destroy (by_kpub_map); + if (NULL != instances) { unsigned int i; @@ -560,16 +566,23 @@ instances_iterator_cb (void *cls, struct MerchantInstance * get_instance (struct json_t *json) { - unsigned int i; struct json_t *receiver; + struct GNUNET_HashCode h_receiver; + + /*FIXME who decrefs receiver?*/ if (NULL == (receiver = json_object_get (json, "receiver"))) receiver = json_string ("default"); - for (i=0; NULL != instances[i]; i++) - if (0 == strcmp (json_string_value (receiver), instances[i]->id)) - return instances[i]; - return NULL; + // hash it + GNUNET_CRYPTO_hash (json_string_value (receiver), + strlen (json_string_value (receiver)), + &h_receiver); + + /* We're fine if that returns NULL, the calling routine knows how + to handle that */ + return GNUNET_CONTAINER_multihashmap_get (by_id_map, + &h_receiver); } /** @@ -717,14 +730,14 @@ run (void *cls, } if (NULL == - (by_id_map = GNUNET_CONTAINER_multihashmap_create(0, GNUNET_NO))) + (by_id_map = GNUNET_CONTAINER_multihashmap_create(1, GNUNET_NO))) { GNUNET_SCHEDULER_shutdown (); return; } if (NULL == - (by_kpub_map = GNUNET_CONTAINER_multihashmap_create(0, GNUNET_NO))) + (by_kpub_map = GNUNET_CONTAINER_multihashmap_create(1, GNUNET_NO))) { GNUNET_SCHEDULER_shutdown (); return; |