| Index: base/process/memory_mac.mm
|
| diff --git a/base/process/memory_mac.mm b/base/process/memory_mac.mm
|
| index 155004dc0a43e257a4918d79b9e9b7aca4a96182..4b5a3ce9c8cb60834b8ab52ab594fa4585481585 100644
|
| --- a/base/process/memory_mac.mm
|
| +++ b/base/process/memory_mac.mm
|
| @@ -5,10 +5,18 @@
|
| #include "base/process/memory.h"
|
|
|
| #include "base/allocator/allocator_interception_mac.h"
|
| +#include "base/allocator/allocator_shim.h"
|
| +#include "base/allocator/features.h"
|
| #include "build/build_config.h"
|
|
|
| namespace base {
|
|
|
| +namespace {
|
| +void oom_killer_new() {
|
| + TerminateBecauseOutOfMemory(0);
|
| +}
|
| +} // namespace
|
| +
|
| void EnableTerminationOnHeapCorruption() {
|
| #if !ARCH_CPU_64_BITS
|
| DLOG(WARNING) << "EnableTerminationOnHeapCorruption only works on 64-bit";
|
| @@ -24,6 +32,17 @@ bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
|
| }
|
|
|
| void EnableTerminationOnOutOfMemory() {
|
| + // Step 1: Enable OOM killer on C++ failures.
|
| + std::set_new_handler(oom_killer_new);
|
| +
|
| +// Step 2: Enable OOM killer on C-malloc failures for the default zone (if we
|
| +// have a shim).
|
| +#if BUILDFLAG(USE_EXPERIMENTAL_ALLOCATOR_SHIM)
|
| + allocator::SetCallNewHandlerOnMallocFailure(true);
|
| +#endif
|
| +
|
| + // Step 3: Enable OOM killer on all other malloc zones (or just "all" without
|
| + // "other" if shim is disabled).
|
| allocator::InterceptAllocationsMac();
|
| }
|
|
|
|
|