// 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_
