Add some debugging code to microdesc.[ch]

This commit is contained in:
Nick Mathewson 2011-09-28 14:13:49 -04:00
parent a4b7525c3c
commit 4a10845075
2 changed files with 26 additions and 2 deletions

View File

@ -499,6 +499,28 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
return 0; 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 /** Deallocate a single microdescriptor. Note: the microdescriptor MUST have
* previously been removed from the cache if it had ever been inserted. */ * previously been removed from the cache if it had ever been inserted. */
void void
@ -535,8 +557,8 @@ microdesc_free(microdesc_t *md)
log_warn(LD_BUG, "microdesc_free() called, but md was still referenced " log_warn(LD_BUG, "microdesc_free() called, but md was still referenced "
"%d node(s); held_by_nodes == %u", found, md->held_by_nodes); "%d node(s); held_by_nodes == %u", found, md->held_by_nodes);
} else { } else {
log_warn(LD_BUG, "microdesc_free() called with held_by_nodes set, but " log_warn(LD_BUG, "microdesc_free() called with held_by_nodes set to %u, "
"md was not refrenced by any nodes"); "but md was not referenced by any nodes", md->held_by_nodes);
} }
tor_fragile_assert(); tor_fragile_assert();
} }

View File

@ -14,6 +14,8 @@
microdesc_cache_t *get_microdesc_cache(void); microdesc_cache_t *get_microdesc_cache(void);
void microdesc_check_counts(void);
smartlist_t *microdescs_add_to_cache(microdesc_cache_t *cache, smartlist_t *microdescs_add_to_cache(microdesc_cache_t *cache,
const char *s, const char *eos, saved_location_t where, const char *s, const char *eos, saved_location_t where,
int no_save, time_t listed_at, int no_save, time_t listed_at,