[tor-commits] [tor/master] Fix hash functions for transport_name in client entry

nickm at torproject.org nickm at torproject.org
Thu Aug 15 16:16:46 UTC 2013


commit 34d02484c06f26653563176e4b5db2829ae4bc23
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Jul 16 13:59:31 2013 -0400

    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 b4f54d4..21dceed 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) &&





More information about the tor-commits mailing list