// 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 BASE_ALLOCATOR_OOM_H #define BASE_ALLOCATOR_OOM_H #include "base/logging.h" #if defined(OS_WIN) #include #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() \ do { \ OOM_CRASH_PREVENT_ICF(); \ ::RaiseException(0xE0000008, EXCEPTION_NONCONTINUABLE, 0, nullptr); \ IMMEDIATE_CRASH(); \ } while (0) #else #define OOM_CRASH() \ do { \ OOM_CRASH_PREVENT_ICF(); \ IMMEDIATE_CRASH(); \ } while (0) #endif #endif // BASE_ALLOCATOR_OOM_H