XBZRLE encoded migration introduced a MRU page cache meachnism. Unfortunately, cached items where never freed on a collision.
This lead to out of memory conditions during XBZRLE migration if the page cache was small and there where a lot of collisions. Signed-off-by: Peter Lieven <p...@kamp.de> --- page_cache.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/page_cache.c b/page_cache.c index ba5640b..a6c3a15 100644 --- a/page_cache.c +++ b/page_cache.c @@ -152,8 +152,10 @@ void cache_insert(PageCache *cache, uint64_t addr, uint8_t *pdata) /* actual update of entry */ it = cache_get_by_addr(cache, addr); - if (!it->it_data) { + if (it->it_data == NULL) { cache->num_items++; + } else { + g_free(it->it_data); } it->it_data = pdata; -- 1.7.9.5