Loading src/or/conscache.c +22 −4 Original line number Diff line number Diff line Loading @@ -9,6 +9,11 @@ #define CCE_MAGIC 0x17162253 #ifdef _WIN32 /* On Windows, unlink won't work if there's an active mmap. */ #define MUST_UNMAP_TO_UNLINK #endif /** * A consensus_cache_entry_t is a reference-counted handle to an * item in a consensus_cache_t. It can be mmapped into RAM, or not, Loading Loading @@ -406,23 +411,36 @@ int consensus_cache_get_n_filenames_available(consensus_cache_t *cache) { tor_assert(cache); int max = storage_dir_get_max_files(cache->dir); int max = cache->max_entries; int used = smartlist_len(storage_dir_list(cache->dir)); #ifdef MUST_UNMAP_TO_UNLINK if (used > max) return 0; #else tor_assert_nonfatal(max >= used); #endif return max - used; } /** * Delete every element of <b>cache</b> has been marked with * consensus_cache_entry_mark_for_removal. If <b>force</b> is false, * retain those entries which are not in use except by the cache. * retain those entries which are in use by something other than the cache. */ void consensus_cache_delete_pending(consensus_cache_t *cache, int force) { SMARTLIST_FOREACH_BEGIN(cache->entries, consensus_cache_entry_t *, ent) { tor_assert_nonfatal(ent->in_cache == cache); if (! force) { int force_ent = force; #ifdef MUST_UNMAP_TO_UNLINK /* We cannot delete anything with an active mmap on win32, so no * force-deletion. */ if (ent->map) { force_ent = 0; } #endif if (! force_ent) { if (ent->refcnt > 1 || BUG(ent->in_cache == NULL)) { /* Somebody is using this entry right now */ continue; Loading Loading
src/or/conscache.c +22 −4 Original line number Diff line number Diff line Loading @@ -9,6 +9,11 @@ #define CCE_MAGIC 0x17162253 #ifdef _WIN32 /* On Windows, unlink won't work if there's an active mmap. */ #define MUST_UNMAP_TO_UNLINK #endif /** * A consensus_cache_entry_t is a reference-counted handle to an * item in a consensus_cache_t. It can be mmapped into RAM, or not, Loading Loading @@ -406,23 +411,36 @@ int consensus_cache_get_n_filenames_available(consensus_cache_t *cache) { tor_assert(cache); int max = storage_dir_get_max_files(cache->dir); int max = cache->max_entries; int used = smartlist_len(storage_dir_list(cache->dir)); #ifdef MUST_UNMAP_TO_UNLINK if (used > max) return 0; #else tor_assert_nonfatal(max >= used); #endif return max - used; } /** * Delete every element of <b>cache</b> has been marked with * consensus_cache_entry_mark_for_removal. If <b>force</b> is false, * retain those entries which are not in use except by the cache. * retain those entries which are in use by something other than the cache. */ void consensus_cache_delete_pending(consensus_cache_t *cache, int force) { SMARTLIST_FOREACH_BEGIN(cache->entries, consensus_cache_entry_t *, ent) { tor_assert_nonfatal(ent->in_cache == cache); if (! force) { int force_ent = force; #ifdef MUST_UNMAP_TO_UNLINK /* We cannot delete anything with an active mmap on win32, so no * force-deletion. */ if (ent->map) { force_ent = 0; } #endif if (! force_ent) { if (ent->refcnt > 1 || BUG(ent->in_cache == NULL)) { /* Somebody is using this entry right now */ continue; Loading