diff options
author | David Goulet <dgoulet@ev0ke.net> | 2015-06-25 15:11:40 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2015-08-11 09:34:41 -0400 |
commit | d06af95ba3fdcb0c9820dcf34146ba68458d5e46 (patch) | |
tree | 747404371194ba1812b320d94e6cd9db90dec737 | |
parent | ab9a0e340728abd96128da726f67b4ccca10ba52 (diff) | |
download | tor-d06af95ba3fdcb0c9820dcf34146ba68458d5e46.tar.gz tor-d06af95ba3fdcb0c9820dcf34146ba68458d5e46.zip |
Purge client HS failure cache on NEWNYM
Signed-off-by: David Goulet <dgoulet@ev0ke.net>
-rw-r--r-- | src/or/rendcache.c | 12 | ||||
-rw-r--r-- | src/or/rendcache.h | 1 | ||||
-rw-r--r-- | src/or/rendclient.c | 1 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/or/rendcache.c b/src/or/rendcache.c index 7a86546b7a..acb9447de8 100644 --- a/src/or/rendcache.c +++ b/src/or/rendcache.c @@ -258,6 +258,18 @@ rend_cache_purge(void) rend_cache = strmap_new(); } +/** Remove ALL entries from the failure cache. This is also called when a + * NEWNYM signal is received. */ +void +rend_cache_failure_purge(void) +{ + if (rend_cache_failure) { + log_info(LD_REND, "Purging HS failure cache"); + strmap_free(rend_cache_failure, rend_cache_failure_entry_free_); + } + rend_cache_failure = strmap_new(); +} + /** Lookup the rend failure cache using a relay identity digest in * <b>identity</b> and service ID <b>service_id</b>. If found, the intro * failure is set in <b>intro_entry</b> else it stays untouched. Return 1 diff --git a/src/or/rendcache.h b/src/or/rendcache.h index 21be9f908b..9a18810821 100644 --- a/src/or/rendcache.h +++ b/src/or/rendcache.h @@ -68,6 +68,7 @@ size_t rend_cache_get_total_allocation(void); void rend_cache_intro_failure_note(unsigned int failure, const uint8_t *identity, const char *service_id); +void rend_cache_failure_purge(void); #endif /* TOR_RENDCACHE_H */ diff --git a/src/or/rendclient.c b/src/or/rendclient.c index 0b22f46ac0..c6f29a7707 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -38,6 +38,7 @@ void rend_client_purge_state(void) { rend_cache_purge(); + rend_cache_failure_purge(); rend_client_cancel_descriptor_fetches(); rend_client_purge_last_hid_serv_requests(); } |