diff --git a/src/or/routerlist.c b/src/or/routerlist.c index 8d29b89ea9..725718be95 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -990,6 +990,7 @@ router_rebuild_store(int flags, desc_store_t *store) size_t total_expected_len = 0; int had_any; int force = flags & RRS_FORCE; + int res; if (!force && !router_should_rebuild_store(store)) { r = 0; @@ -1064,8 +1065,12 @@ router_rebuild_store(int flags, desc_store_t *store) /* Our mmap is now invalid. */ if (store->mmap) { - tor_munmap_file(store->mmap); - store->mmap = NULL; + res = tor_munmap_file(store->mmap); + if (res == 0) { + store->mmap = NULL; + } else { + log_warn(LD_FS, "Unable to munmap route store in %s", fname); + } } if (replace_file(fname_tmp, fname)<0) { @@ -1136,12 +1141,21 @@ router_reload_router_list_impl(desc_store_t *store) struct stat st; int extrainfo = (store->type == EXTRAINFO_STORE); store->journal_len = store->store_len = 0; + int res; fname = get_datadir_fname(store->fname_base); - if (store->mmap) /* get rid of it first */ - tor_munmap_file(store->mmap); - store->mmap = NULL; + if (store->mmap) { + /* get rid of it first */ + res = tor_munmap_file(store->mmap); + if (res == 0) { + store->mmap = NULL; + } else { + log_warn(LD_FS, "Failed to munmap %s", fname); + tor_free(fname); + return -1; + } + } store->mmap = tor_mmap_file(fname); if (store->mmap) { @@ -2782,6 +2796,8 @@ extrainfo_free_(void *e) void routerlist_free(routerlist_t *rl) { + int res; + if (!rl) return; rimap_free(rl->identity_map, NULL); @@ -2794,10 +2810,18 @@ routerlist_free(routerlist_t *rl) signed_descriptor_free(sd)); smartlist_free(rl->routers); smartlist_free(rl->old_routers); - if (routerlist->desc_store.mmap) - tor_munmap_file(routerlist->desc_store.mmap); - if (routerlist->extrainfo_store.mmap) - tor_munmap_file(routerlist->extrainfo_store.mmap); + if (routerlist->desc_store.mmap) { + res = tor_munmap_file(routerlist->desc_store.mmap); + if (res != 0) { + log_warn(LD_FS, "Failed to munmap routerlist->desc_store.mmap"); + } + } + if (routerlist->extrainfo_store.mmap) { + res = tor_munmap_file(routerlist->extrainfo_store.mmap); + if (res != 0) { + log_warn(LD_FS, "Failed to munmap routerlist->extrainfo_store.mmap"); + } + } tor_free(rl); router_dir_info_changed();