| // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef THIRD_PARTY_BASE_ALLOCATOR_PARTITION_ALLOCATOR_OOM_H_ |
| #define THIRD_PARTY_BASE_ALLOCATOR_PARTITION_ALLOCATOR_OOM_H_ |
| |
| #include "third_party/base/allocator/partition_allocator/oom_callback.h" |
| #include "third_party/base/immediate_crash.h" |
| |
| #if defined(OS_WIN) |
| #include <windows.h> |
| #endif |
| |
| // Do not want trivial entry points just calling OOM_CRASH() to be |
| // commoned up by linker icf/comdat folding. |
| #define OOM_CRASH_PREVENT_ICF() \ |
| volatile int oom_crash_inhibit_icf = __LINE__; \ |
| ALLOW_UNUSED_LOCAL(oom_crash_inhibit_icf) |
| |
| // OOM_CRASH() - Specialization of IMMEDIATE_CRASH which will raise a custom |
| // exception on Windows to signal this is OOM and not a normal assert. |
| #if defined(OS_WIN) |
| #define OOM_CRASH(size) \ |
| do { \ |
| OOM_CRASH_PREVENT_ICF(); \ |
| base::internal::RunPartitionAllocOomCallback(); \ |
| ::RaiseException(0xE0000008, EXCEPTION_NONCONTINUABLE, 0, nullptr); \ |
| IMMEDIATE_CRASH(); \ |
| } while (0) |
| #else |
| #define OOM_CRASH(size) \ |
| do { \ |
| base::internal::RunPartitionAllocOomCallback(); \ |
| OOM_CRASH_PREVENT_ICF(); \ |
| IMMEDIATE_CRASH(); \ |
| } while (0) |
| #endif |
| |
| #endif // THIRD_PARTY_BASE_ALLOCATOR_PARTITION_ALLOCATOR_OOM_H_ |