mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
New force-delete option on consensus_cache_delete_pending()
If we're out of file space in the storage directory, we'll need to get rid of old files fast.
This commit is contained in:
parent
466e914088
commit
920475f293
@ -95,7 +95,7 @@ consensus_cache_register_with_sandbox(consensus_cache_t *cache,
|
||||
static void
|
||||
consensus_cache_clear(consensus_cache_t *cache)
|
||||
{
|
||||
consensus_cache_delete_pending(cache);
|
||||
consensus_cache_delete_pending(cache, 0);
|
||||
|
||||
SMARTLIST_FOREACH_BEGIN(cache->entries, consensus_cache_entry_t *, ent) {
|
||||
ent->in_cache = NULL;
|
||||
@ -401,17 +401,19 @@ consensus_cache_unmap_lazy(consensus_cache_t *cache, time_t cutoff)
|
||||
|
||||
/**
|
||||
* Delete every element of <b>cache</b> has been marked with
|
||||
* consensus_cache_entry_mark_for_removal, and which is not in use except by
|
||||
* the cache.
|
||||
* consensus_cache_entry_mark_for_removal. If <b>force</b> is false,
|
||||
* retain those entries which are not in use except by the cache.
|
||||
*/
|
||||
void
|
||||
consensus_cache_delete_pending(consensus_cache_t *cache)
|
||||
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 (ent->refcnt > 1 || BUG(ent->in_cache == NULL)) {
|
||||
/* Somebody is using this entry right now */
|
||||
continue;
|
||||
if (! force) {
|
||||
if (ent->refcnt > 1 || BUG(ent->in_cache == NULL)) {
|
||||
/* Somebody is using this entry right now */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (ent->can_remove == 0) {
|
||||
/* Don't want to delete this. */
|
||||
|
@ -17,7 +17,8 @@ struct sandbox_cfg_elem;
|
||||
int consensus_cache_register_with_sandbox(consensus_cache_t *cache,
|
||||
struct sandbox_cfg_elem **cfg);
|
||||
void consensus_cache_unmap_lazy(consensus_cache_t *cache, time_t cutoff);
|
||||
void consensus_cache_delete_pending(consensus_cache_t *cache);
|
||||
void consensus_cache_delete_pending(consensus_cache_t *cache,
|
||||
int force);
|
||||
consensus_cache_entry_t *consensus_cache_add(consensus_cache_t *cache,
|
||||
const config_line_t *labels,
|
||||
const uint8_t *data,
|
||||
|
@ -614,7 +614,7 @@ consdiffmgr_cleanup(void)
|
||||
smartlist_free(diffs);
|
||||
|
||||
// Actually remove files, if they're not used.
|
||||
consensus_cache_delete_pending(cdm_cache_get());
|
||||
consensus_cache_delete_pending(cdm_cache_get(), 0);
|
||||
return n_to_delete;
|
||||
}
|
||||
|
||||
|
@ -203,7 +203,7 @@ test_conscache_cleanup(void *arg)
|
||||
tt_assert(e_tmp == NULL); // not found because pending deletion.
|
||||
|
||||
/* Delete the pending-deletion items. */
|
||||
consensus_cache_delete_pending(cache);
|
||||
consensus_cache_delete_pending(cache, 0);
|
||||
{
|
||||
smartlist_t *entries = smartlist_new();
|
||||
consensus_cache_find_all(entries, cache, NULL, NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user