diff options
author | Peter Lieven <pl@dlhnet.de> | 2013-02-25 19:12:03 +0200 |
---|---|---|
committer | Michael Roth <mdroth@linux.vnet.ibm.com> | 2013-04-02 15:44:43 -0500 |
commit | 0fcf00b55c6a5fb8af1f62a9eb4cbfa3171709e6 (patch) | |
tree | 0c002dd3ce4f3a44401ee98e8d6d811f0951c4e5 | |
parent | 5610ef5863a7834f0680f520beb8c48b2dc107e4 (diff) | |
download | qemu-0fcf00b55c6a5fb8af1f62a9eb4cbfa3171709e6.tar.gz |
page_cache: fix memory leak
XBZRLE encoded migration introduced a MRU page cache
meachnism. Unfortunately, cached items where never freed in
case of a collision in the page cache on cache_insert().
This lead to out of memory conditions during XBZRLE migration
if the page cache was small and there where a lot of collisions
in the cache.
Signed-off-by: Peter Lieven <pl@kamp.de>
Signed-off-by: Orit Wasserman <owasserm@redhat.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Juan Quintela <quintela@redhat.com>
(cherry picked from commit 32a1c08b60a8ac0e63b54a5793a26b5e32b36618)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
-rw-r--r-- | page_cache.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/page_cache.c b/page_cache.c index 748957bc42..b92482c50d 100644 --- a/page_cache.c +++ b/page_cache.c @@ -152,6 +152,9 @@ void cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata) /* actual update of entry */ it = cache_get_by_addr(cache, addr); + /* free old cached data if any */ + g_free(it->it_data); + if (!it->it_data) { cache->num_items++; } |