Browse Source

Switch routerlist.c to using memcmp on digests rather than crypto_pk_cmp_keys(); speed up find_whitespace a lot (8x for me) by using a switch statement. This should speed parsing a lot of routers at once by a lot.

svn:r8430
Nick Mathewson 19 years ago
parent
commit
7b0ec744bc
3 changed files with 22 additions and 6 deletions
  1. 6 0
      ChangeLog
  2. 14 5
      src/common/util.c
  3. 2 1
      src/or/routerlist.c

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+Changes in version 0.1.2.2-alpha - 2006-??-??
+
+  o Minor Bugfixes
+    - Small performance improvements on parsing and inserting
+      descriptors.
+
 Changes in version 0.1.2.1-alpha - 2006-08-27
   o Major features:
     - Add "eventdns" async dns library from Adam Langley, tweaked to

+ 14 - 5
src/common/util.c

@@ -434,11 +434,20 @@ const char *
 find_whitespace(const char *s)
 {
   /* tor_assert(s); */
-
-  while (*s && !TOR_ISSPACE(*s) && *s != '#')
-    s++;
-
-  return s;
+  while (1) {
+    switch (*s)
+    {
+    case '\0':
+    case '#':
+    case ' ':
+    case '\r':
+    case '\n':
+    case '\t':
+      return s;
+    default:
+      ++s;
+    }
+  }
 }
 
 /** Return true iff the 'len' bytes at 'mem' are all zero. */

+ 2 - 1
src/or/routerlist.c

@@ -1674,7 +1674,8 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
     routerinfo_t *old_router = smartlist_get(routerlist->routers, i);
     /* XXXX This might be a slow point; can't we just look up in one of the
      * digestmaps? -NM */
-    if (!crypto_pk_cmp_keys(router->identity_pkey,old_router->identity_pkey)) {
+    if (!memcmp(router->cache_info.identity_digest,
+                old_router->cache_info.identity_digest, DIGEST_LEN)) {
       if (router->cache_info.published_on <=
           old_router->cache_info.published_on) {
         /* Same key, but old */