summaryrefslogtreecommitdiff
path: root/page_cache.c
diff options
context:
space:
mode:
authorOrit Wasserman <owasserm@redhat.com>2014-01-30 20:08:37 +0200
committerJuan Quintela <quintela@redhat.com>2014-02-04 16:50:22 +0100
commita17b2fd3580d1da96e806c8b58e61255e8c57577 (patch)
treea55df342288def4ab1bbadea1dce5c4cf72003c1 /page_cache.c
parenta5615b14a66e86f620e90c8f4b3537c28bb328d4 (diff)
downloadqemu-a17b2fd3580d1da96e806c8b58e61255e8c57577.tar.gz
Don't abort on out of memory when creating page cache
Signed-off-by: Orit Wasserman <owasserm@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'page_cache.c')
-rw-r--r--page_cache.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/page_cache.c b/page_cache.c
index a05db643cc..62a53f8c89 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;