diff --git a/changes/bug17402 b/changes/bug17402 new file mode 100644 index 0000000000..4760e00b04 --- /dev/null +++ b/changes/bug17402 @@ -0,0 +1,3 @@ + o Major bugfixes (memory leak): + - Fix a memory leak in rend_cache_failure_entry_free(). + Fixes bug 17402; bugfix on 0.2.7.3-rc. diff --git a/src/or/rendcache.c b/src/or/rendcache.c index deb2fea4de..ef7d182026 100644 --- a/src/or/rendcache.c +++ b/src/or/rendcache.c @@ -127,6 +127,12 @@ rend_cache_failure_intro_entry_free(rend_cache_failure_intro_t *entry) tor_free(entry); } +static void +rend_cache_failure_intro_entry_free_(void *entry) +{ + rend_cache_failure_intro_entry_free_(entry); +} + /** Allocate a rend cache failure intro object and return it. failure * is set into the object. This function can not fail. */ STATIC rend_cache_failure_intro_t * @@ -147,11 +153,9 @@ rend_cache_failure_entry_free(rend_cache_failure_t *entry) } /* Free and remove every intro failure object. */ - DIGESTMAP_FOREACH_MODIFY(entry->intro_failures, key, - rend_cache_failure_intro_t *, e) { - rend_cache_failure_intro_entry_free(e); - MAP_DEL_CURRENT(key); - } DIGESTMAP_FOREACH_END; + digestmap_free(entry->intro_failures, + rend_cache_failure_intro_entry_free_); + tor_free(entry); }