Clean up rend cache on shutdown

svn:r3714
This commit is contained in:
Nick Mathewson
2005-02-28 22:38:00 +00:00
parent 331badb6ef
commit 349ee1abea
3 changed files with 19 additions and 3 deletions
+1
View File
@@ -1255,6 +1255,7 @@ void tor_free_all(void)
free_dir_policy();
dirserv_free_all();
rend_service_free_all();
rend_cache_free_all();
rep_hist_free_all();
dns_free_all();
clear_pending_onions();
+1
View File
@@ -1586,6 +1586,7 @@ typedef struct rend_cache_entry_t {
void rend_cache_init(void);
void rend_cache_clean(void);
void rend_cache_free_all(void);
int rend_valid_service_id(const char *query);
int rend_cache_lookup_desc(const char *query, const char **desc, size_t *desc_len);
int rend_cache_lookup_entry(const char *query, rend_cache_entry_t **entry_out);
+17 -3
View File
@@ -170,6 +170,22 @@ void rend_cache_init(void)
rend_cache = strmap_new();
}
static void
_rend_cache_entry_free(void *p)
{
rend_cache_entry_t *e = p;
rend_service_descriptor_free(e->parsed);
tor_free(e->desc);
tor_free(e);
}
void
rend_cache_free_all(void)
{
strmap_free(rend_cache, _rend_cache_entry_free);
rend_cache = NULL;
}
/** Removes all old entries from the service descriptor cache.
*/
void rend_cache_clean(void)
@@ -185,9 +201,7 @@ void rend_cache_clean(void)
ent = (rend_cache_entry_t*)val;
if (ent->parsed->timestamp < cutoff) {
iter = strmap_iter_next_rmv(rend_cache, iter);
rend_service_descriptor_free(ent->parsed);
tor_free(ent->desc);
tor_free(ent);
_rend_cache_entry_free(ent);
} else {
iter = strmap_iter_next(rend_cache, iter);
}