commit 4a10845075d14df285e52ea4bdd72ff12c10c959 Author: Nick Mathewson nickm@torproject.org Date: Wed Sep 28 14:13:49 2011 -0400
Add some debugging code to microdesc.[ch] --- src/or/microdesc.c | 26 ++++++++++++++++++++++++-- src/or/microdesc.h | 2 ++ 2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/or/microdesc.c b/src/or/microdesc.c index 0517e47..92f5c03 100644 --- a/src/or/microdesc.c +++ b/src/or/microdesc.c @@ -499,6 +499,28 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force) return 0; }
+/** Make sure that the reference count of every microdescriptor in cache is + * accurate. */ +void +microdesc_check_counts(void) +{ + microdesc_t **mdp; + if (!the_microdesc_cache) + return; + + HT_FOREACH(mdp, microdesc_map, &the_microdesc_cache->map) { + microdesc_t *md = *mdp; + unsigned int found=0; + const smartlist_t *nodes = nodelist_get_list(); + SMARTLIST_FOREACH(nodes, node_t *, node, { + if (node->md == md) { + ++found; + } + }); + tor_assert(found == md->held_by_nodes); + } +} + /** Deallocate a single microdescriptor. Note: the microdescriptor MUST have * previously been removed from the cache if it had ever been inserted. */ void @@ -535,8 +557,8 @@ microdesc_free(microdesc_t *md) log_warn(LD_BUG, "microdesc_free() called, but md was still referenced " "%d node(s); held_by_nodes == %u", found, md->held_by_nodes); } else { - log_warn(LD_BUG, "microdesc_free() called with held_by_nodes set, but " - "md was not refrenced by any nodes"); + log_warn(LD_BUG, "microdesc_free() called with held_by_nodes set to %u, " + "but md was not referenced by any nodes", md->held_by_nodes); } tor_fragile_assert(); } diff --git a/src/or/microdesc.h b/src/or/microdesc.h index 72e4572..4564132 100644 --- a/src/or/microdesc.h +++ b/src/or/microdesc.h @@ -14,6 +14,8 @@
microdesc_cache_t *get_microdesc_cache(void);
+void microdesc_check_counts(void); + smartlist_t *microdescs_add_to_cache(microdesc_cache_t *cache, const char *s, const char *eos, saved_location_t where, int no_save, time_t listed_at,