blob: 7b4fb6effcf5ac6f7aeadda75cd6304989a6192d [file] [log] [blame]
// 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_