Chromium Code Reviews| Index: third_party/tcmalloc/chromium/src/windows/port.cc |
| =================================================================== |
| --- third_party/tcmalloc/chromium/src/windows/port.cc (revision 110522) |
| +++ third_party/tcmalloc/chromium/src/windows/port.cc (working copy) |
| @@ -258,6 +258,30 @@ |
| return result; |
| } |
| +size_t TCMalloc_SystemAddGuard(void* start, size_t size) { |
| + static size_t pagesize = 0; |
| + if (pagesize == 0) { |
| + SYSTEM_INFO system_info; |
| + GetSystemInfo(&system_info); |
| + pagesize = system_info.dwPageSize; |
| + } |
| + |
|
jar (doing other things)
2011/11/24 00:30:54
You need to exit if size < pagesize.
You might as
jschuh
2011/11/24 01:02:05
Ugh. That was dumb.
|
| + // We know that TCMalloc_SystemAlloc will give us a correct page alignment |
| + // regardless, so we can just assert to detect erroneous callers. |
| + assert(reinterpret_cast<size_t>(start) % pagesize == 0); |
| + |
| + // Add a guard page to catch metadata corruption. We're using the |
| + // PAGE_GUARD flag rather than NO_ACCESS because we want the unique |
| + // exception in crash reports. |
| + DWORD permissions = 0; |
| + if (VirtualProtect(start, pagesize, PAGE_READONLY | PAGE_GUARD, |
| + &permissions)) { |
| + return pagesize; |
| + } |
| + |
| + return 0; |
| +} |
| + |
| void TCMalloc_SystemRelease(void* start, size_t length) { |
| if (VirtualFree(start, length, MEM_DECOMMIT)) |
| return; |