Loading changes/bug7164_diagnostic 0 → 100644 +4 −0 Changes for changes/bug7164_diagnostic: 4 added lines, 0 removed lines. Original line number Diff line number Diff line 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. src/or/microdesc.c +11 −9 Changes for src/or/microdesc.c: 11 added lines, 9 removed lines. Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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(); } Loading @@ -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(); } Loading src/or/microdesc.h +3 −1 Changes for src/or/microdesc.h: 3 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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); Loading Loading
changes/bug7164_diagnostic 0 → 100644 +4 −0 Changes for changes/bug7164_diagnostic: 4 added lines, 0 removed lines. Original line number Diff line number Diff line 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.
src/or/microdesc.c +11 −9 Changes for src/or/microdesc.c: 11 added lines, 9 removed lines. Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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(); } Loading @@ -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(); } Loading
src/or/microdesc.h +3 −1 Changes for src/or/microdesc.h: 3 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -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); Loading