diff options
Diffstat (limited to 'base/process/memory.cc')
-rw-r--r-- | base/process/memory.cc | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/base/process/memory.cc b/base/process/memory.cc new file mode 100644 index 0000000000..6349c08ca0 --- /dev/null +++ b/base/process/memory.cc @@ -0,0 +1,54 @@ +// Copyright 2014 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. + +#include "base/debug/alias.h" +#include "base/logging.h" +#include "base/process/memory.h" +#include "build/build_config.h" + +namespace base { + +// Defined in memory_win.cc for Windows. +#if !defined(OS_WIN) + +namespace { + +// Breakpad server classifies base::`anonymous namespace'::OnNoMemory as +// out-of-memory crash. +NOINLINE void OnNoMemory(size_t size) { + size_t tmp_size = size; + base::debug::Alias(&tmp_size); + LOG(FATAL) << "Out of memory. size=" << tmp_size; +} + +} // namespace + +void TerminateBecauseOutOfMemory(size_t size) { + OnNoMemory(size); +} + +#endif + +// Defined in memory_mac.mm for Mac. +#if !defined(OS_MACOSX) + +bool UncheckedCalloc(size_t num_items, size_t size, void** result) { + const size_t alloc_size = num_items * size; + + // Overflow check + if (size && ((alloc_size / size) != num_items)) { + *result = NULL; + return false; + } + + if (!UncheckedMalloc(alloc_size, result)) + return false; + + memset(*result, 0, alloc_size); + return true; +} + +#endif + +} // namespace base |