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
This commit is contained in:
Nick Mathewson 2006-09-19 22:20:09 +00:00
parent e9abe750ea
commit 7b0ec744bc
3 changed files with 22 additions and 6 deletions

View File

@ -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

View File

@ -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. */

View File

@ -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 */