Pārlūkot izejas kodu

Clean up rend cache on shutdown

svn:r3714
Nick Mathewson 19 gadi atpakaļ
vecāks
revīzija
349ee1abea
3 mainītis faili ar 19 papildinājumiem un 3 dzēšanām
  1. 1 0
      src/or/main.c
  2. 1 0
      src/or/or.h
  3. 17 3
      src/or/rendcommon.c

+ 1 - 0
src/or/main.c

@@ -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 - 0
src/or/or.h

@@ -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
src/or/rendcommon.c

@@ -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);
     }