[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor/master] Merge branch 'maint-0.4.5' into maint-0.4.6



commit f0260c4cea6da784369e8d47f0b4bf01863c5af5
Merge: 38bfb3cdfe 8c29729916
Author: George Kadianakis <desnacked@xxxxxxxxxx>
Date:   Fri Apr 23 13:00:23 2021 +0300

    Merge branch 'maint-0.4.5' into maint-0.4.6

 changes/ticket40356       |  3 +++
 src/feature/hs/hs_cache.c | 61 ++++++++++++++++++++++++++++-------------------
 2 files changed, 39 insertions(+), 25 deletions(-)

diff --cc src/feature/hs/hs_cache.c
index bb1532f808,9c35936748..cf8e377313
--- a/src/feature/hs/hs_cache.c
+++ b/src/feature/hs/hs_cache.c
@@@ -390,10 -415,21 +415,21 @@@ remove_v3_desc_as_client(const hs_cache
  static void
  store_v3_desc_as_client(hs_cache_client_descriptor_t *desc)
  {
+   hs_cache_client_descriptor_t *cached_desc;
+ 
    tor_assert(desc);
+ 
+   /* Because the lookup function doesn't return an expired entry, it can linger
+    * in the cache until we clean it up or a new descriptor is stored. So,
+    * before adding, we'll make sure we are not overwriting an old descriptor
+    * (which is OK in terms of semantic) but leads to memory leak. */
+   cached_desc = digest256map_get(hs_cache_v3_client, desc->key.pubkey);
+   if (cached_desc) {
+     cache_client_desc_free(cached_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));
 +  hs_cache_increment_allocation(cache_get_client_entry_size(desc));
  }
  
  /** Query our cache and return the entry or NULL if not found or if expired. */



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits