Possible fix for leaks during entry expiry / truncation (#340)

This commit is contained in:
Tony Levi 2016-06-28 14:59:20 +09:30
parent 676b2090fb
commit d57c12d3c3

View File

@ -496,10 +496,12 @@ bool StatCache::TruncateCache(void)
for(stat_cache_t::iterator iter = stat_cache.begin(); iter != stat_cache.end(); ){ for(stat_cache_t::iterator iter = stat_cache.begin(); iter != stat_cache.end(); ){
stat_cache_entry* entry = iter->second; stat_cache_entry* entry = iter->second;
if(!entry || (0L < entry->notruncate && IsExpireStatCacheTime(entry->cache_date, ExpireTime))){ if(!entry || (0L < entry->notruncate && IsExpireStatCacheTime(entry->cache_date, ExpireTime))){
stat_cache.erase(iter++); if(entry){
}else{ delete entry;
++iter; }
stat_cache.erase(iter);
} }
++iter;
} }
} }
@ -532,6 +534,9 @@ bool StatCache::TruncateCache(void)
stat_cache_t::iterator siter = *iiter; stat_cache_t::iterator siter = *iiter;
S3FS_PRN_DBG("truncate stat cache[path=%s]", siter->first.c_str()); S3FS_PRN_DBG("truncate stat cache[path=%s]", siter->first.c_str());
if(siter->second){
delete siter->second;
}
stat_cache.erase(siter); stat_cache.erase(siter);
} }
S3FS_MALLOCTRIM(0); S3FS_MALLOCTRIM(0);