Chromium Code Reviews| 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); |