aboutsummaryrefslogtreecommitdiff
path: root/src/or/conscache.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/or/conscache.c')
-rw-r--r--src/or/conscache.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/or/conscache.c b/src/or/conscache.c
index c30d1998c6..350a05b0f2 100644
--- a/src/or/conscache.c
+++ b/src/or/conscache.c
@@ -54,6 +54,11 @@ struct consensus_cache_t {
storage_dir_t *dir;
/** List of all the entries in the directory. */
smartlist_t *entries;
+
+ /** The maximum number of entries that we'd like to allow in this cache.
+ * This is the same as the storagedir limit when MUST_UNMAP_TO_UNLINK is
+ * not defined. */
+ unsigned max_entries;
};
static void consensus_cache_clear(consensus_cache_t *cache);
@@ -71,6 +76,10 @@ consensus_cache_open(const char *subdir, int max_entries)
{
consensus_cache_t *cache = tor_malloc_zero(sizeof(consensus_cache_t));
char *directory = get_datadir_fname(subdir);
+ cache->max_entries = max_entries;
+#ifdef MUST_UNMAP_TO_UNLINK
+ max_entries = 1000000;
+#endif
cache->dir = storage_dir_new(directory, max_entries);
tor_free(directory);
if (!cache->dir) {
@@ -82,6 +91,19 @@ consensus_cache_open(const char *subdir, int max_entries)
return cache;
}
+/** Return true if it's okay to put more entries in this cache than
+ * its official file limit. */
+int
+consensus_cache_may_overallocate(consensus_cache_t *cache)
+{
+ (void) cache;
+#ifdef MUST_UNMAP_TO_UNLINK
+ return 1;
+#else
+ return 0;
+#endif
+}
+
/**
* Tell the sandbox (if any) configured by <b>cfg</b> to allow the
* operations that <b>cache</b> will need.
@@ -90,6 +112,11 @@ int
consensus_cache_register_with_sandbox(consensus_cache_t *cache,
struct sandbox_cfg_elem **cfg)
{
+#ifdef MUST_UNMAP_TO_UNLINK
+ /* Our sandbox doesn't support huge limits like we use here.
+ */
+ tor_assert_nonfatal_unreached();
+#endif
return storage_dir_register_with_sandbox(cache->dir, cfg);
}