Commit 96e8e30e authored by Nick Mathewson's avatar Nick Mathewson 🐘
Browse files

Merge remote-tracking branch 'origin/maint-0.2.4'

parents c547502e 323cb655
Loading
Loading
Loading
Loading
+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.
+11 −9
Changes for src/or/microdesc.c: 11 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -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();
  }
+3 −1
Changes for src/or/microdesc.h: 3 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -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);