[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 5/6] Don't abort on out of memory when creati
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] [PATCH v2 5/6] Don't abort on out of memory when creating page cache |
Date: |
Thu, 30 Jan 2014 18:21:10 +0000 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
* Orit Wasserman (address@hidden) wrote:
> Signed-off-by: Orit Wasserman <address@hidden>
> ---
> arch_init.c | 18 ++++++++++++++++--
> page_cache.c | 18 ++++++++++++++----
> 2 files changed, 30 insertions(+), 6 deletions(-)
Reviewed-by: Dr. David Alan Gilbert <address@hidden>
>
> diff --git a/arch_init.c b/arch_init.c
> index 5eff80b..1fa5f1f 100644
> --- a/arch_init.c
> +++ b/arch_init.c
> @@ -664,8 +664,22 @@ static int ram_save_setup(QEMUFile *f, void *opaque)
> DPRINTF("Error creating cache\n");
> return -1;
> }
> - XBZRLE.encoded_buf = g_malloc0(TARGET_PAGE_SIZE);
> - XBZRLE.current_buf = g_malloc(TARGET_PAGE_SIZE);
> +
> + /* We prefer not to abort if there is no memory */
> + XBZRLE.encoded_buf = g_try_malloc0(TARGET_PAGE_SIZE);
> + if (!XBZRLE.encoded_buf) {
> + DPRINTF("Error allocating encoded_buf\n");
> + return -1;
> + }
> +
> + XBZRLE.current_buf = g_try_malloc(TARGET_PAGE_SIZE);
> + if (!XBZRLE.current_buf) {
> + DPRINTF("Error allocating current_buf\n");
> + g_free(XBZRLE.encoded_buf);
> + XBZRLE.encoded_buf = NULL;
> + return -1;
> + }
> +
> acct_clear();
> }
>
> diff --git a/page_cache.c b/page_cache.c
> index a05db64..62a53f8 100644
> --- a/page_cache.c
> +++ b/page_cache.c
> @@ -60,8 +60,12 @@ PageCache *cache_init(int64_t num_pages, unsigned int
> page_size)
> return NULL;
> }
>
> - cache = g_malloc(sizeof(*cache));
> -
> + /* We prefer not to abort if there is no memory */
> + cache = g_try_malloc(sizeof(*cache));
> + if (!cache) {
> + DPRINTF("Failed to allocate cache\n");
> + return NULL;
> + }
> /* round down to the nearest power of 2 */
> if (!is_power_of_2(num_pages)) {
> num_pages = pow2floor(num_pages);
> @@ -74,8 +78,14 @@ PageCache *cache_init(int64_t num_pages, unsigned int
> page_size)
>
> DPRINTF("Setting cache buckets to %" PRId64 "\n", cache->max_num_items);
>
> - cache->page_cache = g_malloc((cache->max_num_items) *
> - sizeof(*cache->page_cache));
> + /* We prefer not to abort if there is no memory */
> + cache->page_cache = g_try_malloc((cache->max_num_items) *
> + sizeof(*cache->page_cache));
> + if (!cache->page_cache) {
> + DPRINTF("Failed to allocate cache->page_cache\n");
> + g_free(cache);
> + return NULL;
> + }
>
> for (i = 0; i < cache->max_num_items; i++) {
> cache->page_cache[i].it_data = NULL;
> --
> 1.8.3.1
>
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK
[Qemu-devel] [PATCH v2 3/6] migration:fix free XBZRLE decoded_buf wrong, Orit Wasserman, 2014/01/30
[Qemu-devel] [PATCH v2 5/6] Don't abort on out of memory when creating page cache, Orit Wasserman, 2014/01/30
- Re: [Qemu-devel] [PATCH v2 5/6] Don't abort on out of memory when creating page cache,
Dr. David Alan Gilbert <=
[Qemu-devel] [PATCH v2 6/6] Don't abort on memory allocation error, Orit Wasserman, 2014/01/30