From 34d02484c06f26653563176e4b5db2829ae4bc23 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Tue, 16 Jul 2013 13:59:31 -0400 Subject: Fix hash functions for transport_name in client entry --- src/or/geoip.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/src/or/geoip.c b/src/or/geoip.c index b4f54d4eb..21dceed3d 100644 --- a/src/or/geoip.c +++ b/src/or/geoip.c @@ -486,23 +486,16 @@ static HT_HEAD(clientmap, clientmap_entry_t) client_history = static INLINE unsigned clientmap_entry_hash(const clientmap_entry_t *a) { - return ht_improve_hash(tor_addr_hash(&a->addr)); + unsigned h = tor_addr_hash(&a->addr); + if (a->transport_name) + h += ht_string_hash(a->transport_name); + return ht_improve_hash(h); } /** Hashtable helper: compare two clientmap_entry_t values for equality. */ static INLINE int clientmap_entries_eq(const clientmap_entry_t *a, const clientmap_entry_t *b) { - /* If one entry contains a transport and the other doesn't, then - they are not equal. */ - if (a->transport_name && !b->transport_name) - return 0; - if (!a->transport_name && b->transport_name) - return 0; - /* If entries contain different transports, they they are not - equal. */ - if (a->transport_name && - b->transport_name && - strcmp(a->transport_name, b->transport_name)) + if (strcmp_opt(a->transport_name, b->transport_name)) return 0; return !tor_addr_compare(&a->addr, &b->addr, CMP_EXACT) && -- cgit v1.2.3