diff --git a/src/or/hs_cache.c b/src/or/hs_cache.c index e0d89a70e1..6962c5ce44 100644 --- a/src/or/hs_cache.c +++ b/src/or/hs_cache.c @@ -329,6 +329,14 @@ static digest256map_t *hs_cache_v3_client; * objects all related to a specific service. */ static digest256map_t *hs_cache_client_intro_state; +/* Return the size of a client cache entry in bytes. */ +static size_t +cache_get_client_entry_size(const hs_cache_client_descriptor_t *entry) +{ + return sizeof(*entry) + + strlen(entry->encoded_desc) + hs_desc_obj_size(entry->desc); +} + /* Remove a given descriptor from our cache. */ static void remove_v3_desc_as_client(const hs_cache_client_descriptor_t *desc) @@ -345,6 +353,8 @@ store_v3_desc_as_client(hs_cache_client_descriptor_t *desc) { tor_assert(desc); digest256map_set(hs_cache_v3_client, desc->key.pubkey, desc); + /* Update cache size with this entry for the OOM handler. */ + rend_cache_increment_allocation(cache_get_client_entry_size(desc)); } /* Query our cache and return the entry or NULL if not found. */ @@ -355,14 +365,6 @@ lookup_v3_desc_as_client(const uint8_t *key) return digest256map_get(hs_cache_v3_client, key); } -/* Return the size of a client cache entry in bytes. */ -static size_t -cache_get_client_entry_size(const hs_cache_client_descriptor_t *entry) -{ - return sizeof(*entry) + - strlen(entry->encoded_desc) + hs_desc_obj_size(entry->desc); -} - /* Parse the encoded descriptor in desc_str using * service_identity_pk to decrypt it first. * @@ -616,9 +618,6 @@ cache_store_as_client(hs_cache_client_descriptor_t *client_desc) /* Store descriptor in cache */ store_v3_desc_as_client(client_desc); - /* Update cache size with this entry for the OOM handler. */ - rend_cache_increment_allocation(cache_get_client_entry_size(client_desc)); - done: return 0; }