[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] page_cache: Fix memory leak
From: |
Orit Wasserman |
Subject: |
Re: [Qemu-devel] [PATCH] page_cache: Fix memory leak |
Date: |
Mon, 25 Feb 2013 13:58:08 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130110 Thunderbird/17.0.2 |
On 02/25/2013 01:42 PM, Peter Lieven wrote:
> 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 <address@hidden>
> ---
> 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);
Why? we don't allocate here but just store the pointer.
It is the caller responsibility to allocate/free the data,
for example for migration it is the guest memory page.
Orit
> }
>
> it->it_data = pdata;