[tor-commits] [tor/master] Add some debugging code to microdesc.[ch]

nickm at torproject.org nickm at torproject.org
Wed Sep 28 18:36:14 UTC 2011


commit 4a10845075d14df285e52ea4bdd72ff12c10c959
Author: Nick Mathewson <nickm at 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,





More information about the tor-commits mailing list