| 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..015521f313ac83b2797689d048557b495e3f9049 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_IOS)) || defined(OS_ANDROID)
|
| + void* result;
|
| + // It's the responsibility of the caller to check the return value.
|
| + ignore_result(base::UncheckedMalloc(size, &result));
|
| + 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_IOS)) || defined(OS_ANDROID)
|
| + void* result;
|
| + // It's the responsibility of the caller to check the return value.
|
| + ignore_result(base::UncheckedCalloc(size, 1, &result));
|
| + return result;
|
| #else
|
| SkAutoMutexAcquire lock(gSkNewHandlerMutex);
|
| std::new_handler old_handler = std::set_new_handler(NULL);
|
|
|