Browse Source

stop three memory leaks. nick, fix these if i'm wrong.

svn:r8235
Roger Dingledine 18 years ago
parent
commit
9f5856c03d
2 changed files with 7 additions and 0 deletions
  1. 1 0
      src/common/compat.c
  2. 6 0
      src/or/routerlist.c

+ 1 - 0
src/common/compat.c

@@ -152,6 +152,7 @@ void
 tor_munmap_file(tor_mmap_t *handle)
 {
   munmap((char*)handle->data, handle->size);
+  tor_free(handle);
 }
 #elif defined(MS_WINDOWS)
 typedef struct win_mmap_t {

+ 6 - 0
src/or/routerlist.c

@@ -340,6 +340,10 @@ router_reload_router_list(void)
   router_journal_len = router_store_len = 0;
 
   tor_snprintf(fname, fname_len, "%s/cached-routers", options->DataDirectory);
+
+  if (routerlist->mmap_descriptors) /* get rid of it first */
+    tor_munmap_file(routerlist->mmap_descriptors);
+
   routerlist->mmap_descriptors = tor_mmap_file(fname);
   if (routerlist->mmap_descriptors) {
     router_store_len = routerlist->mmap_descriptors->size;
@@ -1262,6 +1266,8 @@ routerlist_free(routerlist_t *rl)
                     signed_descriptor_free(sd));
   smartlist_free(rl->routers);
   smartlist_free(rl->old_routers);
+  if (routerlist->mmap_descriptors)
+    tor_munmap_file(routerlist->mmap_descriptors);
   tor_free(rl);
 }