diff options
author | Nick Mathewson <nickm@torproject.org> | 2013-03-19 16:16:48 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2013-03-19 16:16:48 -0400 |
commit | 323cb655be7802a3f527bfa4278478d9fbd23944 (patch) | |
tree | cf195279ab47ce79076c935d97c89be3e0fa1fdb | |
parent | 6f20a74d52741cce521cf03b8afee570e3cb367b (diff) | |
parent | adfc3de83308982f91c88e1e6c68dc37d2467746 (diff) | |
download | tor-323cb655be7802a3f527bfa4278478d9fbd23944.tar tor-323cb655be7802a3f527bfa4278478d9fbd23944.tar.gz |
Merge remote-tracking branch 'public/bug7164_diagnostic' into maint-0.2.4
-rw-r--r-- | changes/bug7164_diagnostic | 4 | ||||
-rw-r--r-- | src/or/microdesc.c | 20 | ||||
-rw-r--r-- | src/or/microdesc.h | 4 |
3 files changed, 18 insertions, 10 deletions
diff --git a/changes/bug7164_diagnostic b/changes/bug7164_diagnostic new file mode 100644 index 000000000..8bedfc4bd --- /dev/null +++ b/changes/bug7164_diagnostic @@ -0,0 +1,4 @@ + o Minor features (bug diagnostic): + - If we fail to free a microdescriptor because of bug #7164, log + the filename and line number from which we tried to free it. + This should help us finally fix #7164. diff --git a/src/or/microdesc.c b/src/or/microdesc.c index f9dbcac80..d9955c7b4 100644 --- a/src/or/microdesc.c +++ b/src/or/microdesc.c @@ -550,7 +550,7 @@ microdesc_check_counts(void) /** Deallocate a single microdescriptor. Note: the microdescriptor MUST have * previously been removed from the cache if it had ever been inserted. */ void -microdesc_free(microdesc_t *md) +microdesc_free_(microdesc_t *md, const char *fname, int lineno) { if (!md) return; @@ -561,12 +561,12 @@ microdesc_free(microdesc_t *md) microdesc_cache_t *cache = get_microdesc_cache(); microdesc_t *md2 = HT_FIND(microdesc_map, &cache->map, md); if (md2 == md) { - log_warn(LD_BUG, "microdesc_free() called, but md was still in " - "microdesc_map"); + log_warn(LD_BUG, "microdesc_free() called from %s:%d, but md was still " + "in microdesc_map", fname, lineno); HT_REMOVE(microdesc_map, &cache->map, md); } else { - log_warn(LD_BUG, "microdesc_free() called with held_in_map set, but " - "microdesc was not in the map."); + log_warn(LD_BUG, "microdesc_free() called from %s:%d with held_in_map " + "set, but microdesc was not in the map.", fname, lineno); } tor_fragile_assert(); } @@ -580,11 +580,13 @@ microdesc_free(microdesc_t *md) } }); if (found) { - log_warn(LD_BUG, "microdesc_free() called, but md was still referenced " - "%d node(s); held_by_nodes == %u", found, md->held_by_nodes); + log_warn(LD_BUG, "microdesc_free() called from %s:%d, but md was still " + "referenced %d node(s); held_by_nodes == %u", + fname, lineno, found, md->held_by_nodes); } else { - 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); + log_warn(LD_BUG, "microdesc_free() called from %s:%d with held_by_nodes " + "set to %u, but md was not referenced by any nodes", + fname, lineno, md->held_by_nodes); } tor_fragile_assert(); } diff --git a/src/or/microdesc.h b/src/or/microdesc.h index 4e58aa33f..7adb8c68a 100644 --- a/src/or/microdesc.h +++ b/src/or/microdesc.h @@ -39,7 +39,9 @@ smartlist_t *microdesc_list_missing_digest256(networkstatus_t *ns, int downloadable_only, digestmap_t *skip); -void microdesc_free(microdesc_t *md); +void microdesc_free_(microdesc_t *md, const char *fname, int line); +#define microdesc_free(md) \ + microdesc_free_((md), __FILE__, __LINE__) void microdesc_free_all(void); void update_microdesc_downloads(time_t now); |