mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
conscache.c: do not match entries that are slated for removal.
This commit is contained in:
+10
-5
@@ -174,6 +174,8 @@ consensus_cache_find_first(consensus_cache_t *cache,
|
||||
* Given a <b>cache</b>, add every entry to <b>out<b> for which
|
||||
* <b>key</b>=<b>value</b>. If <b>key</b> is NULL, add every entry.
|
||||
*
|
||||
* Do not add any entry that has been marked for removal.
|
||||
*
|
||||
* Does not adjust reference counts.
|
||||
*/
|
||||
void
|
||||
@@ -182,12 +184,15 @@ consensus_cache_find_all(smartlist_t *out,
|
||||
const char *key,
|
||||
const char *value)
|
||||
{
|
||||
if (! key) {
|
||||
smartlist_add_all(out, cache->entries);
|
||||
return;
|
||||
}
|
||||
|
||||
SMARTLIST_FOREACH_BEGIN(cache->entries, consensus_cache_entry_t *, ent) {
|
||||
if (ent->can_remove == 1) {
|
||||
/* We want to delete this; pretend it isn't there. */
|
||||
continue;
|
||||
}
|
||||
if (! key) {
|
||||
smartlist_add(out, ent);
|
||||
continue;
|
||||
}
|
||||
const char *found_val = consensus_cache_entry_get_value(ent, key);
|
||||
if (found_val && !strcmp(value, found_val)) {
|
||||
smartlist_add(out, ent);
|
||||
|
||||
@@ -200,8 +200,7 @@ test_conscache_cleanup(void *arg)
|
||||
tt_assert(e_tmp);
|
||||
tt_assert(consensus_cache_entry_is_mapped(e_tmp));
|
||||
e_tmp = consensus_cache_find_first(cache, "index", "7");
|
||||
tt_assert(e_tmp);
|
||||
tt_assert(consensus_cache_entry_is_mapped(e_tmp));
|
||||
tt_assert(e_tmp == NULL); // not found because pending deletion.
|
||||
|
||||
/* Delete the pending-deletion items. */
|
||||
consensus_cache_delete_pending(cache);
|
||||
@@ -210,12 +209,12 @@ test_conscache_cleanup(void *arg)
|
||||
consensus_cache_find_all(entries, cache, NULL, NULL);
|
||||
int n = smartlist_len(entries);
|
||||
smartlist_free(entries);
|
||||
tt_int_op(n, OP_EQ, 20 - 1); /* 1 entry was deleted */
|
||||
tt_int_op(n, OP_EQ, 20 - 2); /* 1 entry was deleted; 1 is not-found. */
|
||||
}
|
||||
e_tmp = consensus_cache_find_first(cache, "index", "7"); // refcnt == 1...
|
||||
tt_assert(e_tmp == NULL); // so deleted.
|
||||
e_tmp = consensus_cache_find_first(cache, "index", "14"); // refcnt == 2
|
||||
tt_assert(e_tmp); // so, not deleted.
|
||||
tt_assert(e_tmp == NULL); // not deleted; but not found.
|
||||
|
||||
/* Now do lazy unmapping. */
|
||||
// should do nothing.
|
||||
|
||||
Reference in New Issue
Block a user