diff options
Diffstat (limited to 'base/process/memory_win.cc')
-rw-r--r-- | base/process/memory_win.cc | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/base/process/memory_win.cc b/base/process/memory_win.cc deleted file mode 100644 index fc57b48f1f..0000000000 --- a/base/process/memory_win.cc +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2013 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/process/memory.h" - -#include <new.h> -#include <psapi.h> - -#include "base/logging.h" -#include "base/memory/scoped_ptr.h" - -namespace base { - -namespace { - -#pragma warning(push) -#pragma warning(disable: 4702) - -int OnNoMemory(size_t) { - // Kill the process. This is important for security since most of code - // does not check the result of memory allocation. - __debugbreak(); - _exit(1); - return 0; -} - -#pragma warning(pop) - -// HeapSetInformation function pointer. -typedef BOOL (WINAPI* HeapSetFn)(HANDLE, HEAP_INFORMATION_CLASS, PVOID, SIZE_T); - -} // namespace - -bool EnableLowFragmentationHeap() { - HMODULE kernel32 = GetModuleHandle(L"kernel32.dll"); - HeapSetFn heap_set = reinterpret_cast<HeapSetFn>(GetProcAddress( - kernel32, - "HeapSetInformation")); - - // On Windows 2000, the function is not exported. This is not a reason to - // fail. - if (!heap_set) - return true; - - unsigned number_heaps = GetProcessHeaps(0, NULL); - if (!number_heaps) - return false; - - // Gives us some extra space in the array in case a thread is creating heaps - // at the same time we're querying them. - static const int MARGIN = 8; - scoped_ptr<HANDLE[]> heaps(new HANDLE[number_heaps + MARGIN]); - number_heaps = GetProcessHeaps(number_heaps + MARGIN, heaps.get()); - if (!number_heaps) - return false; - - for (unsigned i = 0; i < number_heaps; ++i) { - ULONG lfh_flag = 2; - // Don't bother with the result code. It may fails on heaps that have the - // HEAP_NO_SERIALIZE flag. This is expected and not a problem at all. - heap_set(heaps[i], - HeapCompatibilityInformation, - &lfh_flag, - sizeof(lfh_flag)); - } - return true; -} - -void EnableTerminationOnHeapCorruption() { - // Ignore the result code. Supported on XP SP3 and Vista. - HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0); -} - -void EnableTerminationOnOutOfMemory() { - _set_new_handler(&OnNoMemory); - _set_new_mode(1); -} - -HMODULE GetModuleFromAddress(void* address) { - HMODULE instance = NULL; - if (!::GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | - GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, - static_cast<char*>(address), - &instance)) { - NOTREACHED(); - } - return instance; -} - -// TODO(b.kelemen): implement it with the required semantics. On Linux this is -// implemented with a weak symbol that is overridden by tcmalloc. This is -// neccessary because base cannot have a direct dependency on tcmalloc. Since -// weak symbols are not supported on Windows this will involve some build time -// magic, much like what is done for libcrt in order to override the allocation -// functions. -bool UncheckedMalloc(size_t size, void** result) { - *result = malloc(size); - return *result != NULL; -} - -} // namespace base |