From d57c12d3c36a6ac08eecf1735eb4bcb524025467 Mon Sep 17 00:00:00 2001 From: Tony Levi Date: Tue, 28 Jun 2016 14:59:20 +0930 Subject: [PATCH] Possible fix for leaks during entry expiry / truncation (#340) --- src/cache.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/cache.cpp b/src/cache.cpp index a4ba770..2fa76b2 100644 --- a/src/cache.cpp +++ b/src/cache.cpp @@ -496,10 +496,12 @@ bool StatCache::TruncateCache(void) for(stat_cache_t::iterator iter = stat_cache.begin(); iter != stat_cache.end(); ){ stat_cache_entry* entry = iter->second; if(!entry || (0L < entry->notruncate && IsExpireStatCacheTime(entry->cache_date, ExpireTime))){ - stat_cache.erase(iter++); - }else{ - ++iter; + if(entry){ + delete entry; + } + stat_cache.erase(iter); } + ++iter; } } @@ -532,6 +534,9 @@ bool StatCache::TruncateCache(void) stat_cache_t::iterator siter = *iiter; S3FS_PRN_DBG("truncate stat cache[path=%s]", siter->first.c_str()); + if(siter->second){ + delete siter->second; + } stat_cache.erase(siter); } S3FS_MALLOCTRIM(0);