Index: skia/ext/SkMemory_new_handler.cpp |
diff --git a/skia/ext/SkMemory_new_handler.cpp b/skia/ext/SkMemory_new_handler.cpp |
index a142f2994e2fac6bb4ab1d43736a52ab867f4b35..0b0c4d8dd354f2c7d8134ca4879bffb782f09e88 100644 |
--- a/skia/ext/SkMemory_new_handler.cpp |
+++ b/skia/ext/SkMemory_new_handler.cpp |
@@ -50,13 +50,15 @@ void* sk_malloc_throw(size_t size) { |
return throw_on_failure(size, malloc(size)); |
} |
-// Platform specific ways to try really hard to get a malloc that won't crash on failure. |
static void* sk_malloc_nothrow(size_t size) { |
-#if defined(ANDROID) |
- // Android doesn't have std::set_new_handler, so we just call malloc. |
- return malloc(size); |
-#elif defined(OS_MACOSX) && !defined(OS_IOS) |
- return base::UncheckedMalloc(size); |
+ // TODO(b.kelemen): we should always use UncheckedMalloc but currently it |
+ // doesn't work as intended everywhere. |
+#if defined(LIBC_GLIBC) || defined(USE_TCMALLOC) || \ |
+ defined(OS_MACOSX) || defined(OS_ANDROID) |
+ void* result; |
+ // It's the responsibility of the caller to check the return value. |
+ bool success ALLOW_UNUSED = base::UncheckedMalloc(size, &result); |
Nico
2014/04/01 21:05:02
Why ALLOW_UNUSED?
Nico
2014/04/01 21:06:19
(i.e. I think you want ignore_result() here. also
|
+ return result; |
#else |
// This is not really thread safe. It only won't collide with itself, but we're totally |
// unprotected from races with other code that calls set_new_handler. |
@@ -79,12 +81,15 @@ void* sk_calloc_throw(size_t size) { |
return throw_on_failure(size, calloc(size, 1)); |
} |
-// Jump through the same hoops as sk_malloc_nothrow to avoid a crash, but for calloc. |
void* sk_calloc(size_t size) { |
-#if defined(ANDROID) |
- return calloc(size, 1); |
-#elif defined(OS_MACOSX) && !defined(OS_IOS) |
- return base::UncheckedCalloc(size, 1); |
+ // TODO(b.kelemen): we should always use UncheckedCalloc but currently it |
+ // doesn't work as intended everywhere. |
+#if defined(LIBC_GLIBC) || defined(USE_TCMALLOC) || \ |
+ defined(OS_MACOSX) || defined(OS_ANDROID) |
+ void* result; |
+ // It's the responsibility of the caller to check the return value. |
+ bool success ALLOW_UNUSED = base::UncheckedCalloc(size, 1, &result); |
+ return result; |
#else |
SkAutoMutexAcquire lock(gSkNewHandlerMutex); |
std::new_handler old_handler = std::set_new_handler(NULL); |