Index: base/process/memory_mac.mm |
diff --git a/base/process/memory_mac.mm b/base/process/memory_mac.mm |
index 9173a37aa4a5a3fdbe49ddd8e6fd39cbf47ca38b..d1518faaa064b7e001740709bcf58cbbf54a3946 100644 |
--- a/base/process/memory_mac.mm |
+++ b/base/process/memory_mac.mm |
@@ -108,7 +108,7 @@ class ThreadLocalBooleanAutoReset { |
}; |
base::LazyInstance<ThreadLocalBoolean>::Leaky |
- g_unchecked_malloc = LAZY_INSTANCE_INITIALIZER; |
+ g_unchecked_alloc = LAZY_INSTANCE_INITIALIZER; |
// NOTE(shess): This is called when the malloc library noticed that the heap |
// is fubar. Avoid calls which will re-enter the malloc library. |
@@ -120,7 +120,7 @@ void CrMallocErrorBreak() { |
// to the OOM killer. The EBADF case comes up because the malloc library |
// attempts to log to ASL (syslog) before calling this code, which fails |
// accessing a Unix-domain socket because of sandboxing. |
- if (errno == ENOMEM || (errno == EBADF && g_unchecked_malloc.Get().Get())) |
+ if (errno == ENOMEM || (errno == EBADF && g_unchecked_alloc.Get().Get())) |
return; |
// A unit test checks this error message, so it needs to be in release builds. |
@@ -493,13 +493,24 @@ void* UncheckedMalloc(size_t size) { |
if (g_old_malloc) { |
#if ARCH_CPU_32_BITS |
ScopedClearErrno clear_errno; |
- ThreadLocalBooleanAutoReset flag(g_unchecked_malloc.Pointer(), true); |
+ ThreadLocalBooleanAutoReset flag(g_unchecked_alloc.Pointer(), true); |
#endif // ARCH_CPU_32_BITS |
return g_old_malloc(malloc_default_zone(), size); |
} |
return malloc(size); |
} |
+void* UncheckedCalloc(size_t num_items, size_t size) { |
+ if (g_old_calloc) { |
+#if ARCH_CPU_32_BITS |
+ ScopedClearErrno clear_errno; |
+ ThreadLocalBooleanAutoReset flag(g_unchecked_alloc.Pointer(), true); |
+#endif // ARCH_CPU_32_BITS |
+ return g_old_calloc(malloc_default_zone(), num_items, size); |
+ } |
+ return calloc(num_items, size); |
+} |
+ |
void EnableTerminationOnOutOfMemory() { |
if (g_oom_killer_enabled) |
return; |