From 048692e5de12c89b80761a9532c86eff526af640 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 18 Sep 2014 20:41:00 -0400 Subject: [PATCH] runtime: fix Windows SysUsed Same fix as for SysUnused. Fixes #8038. LGTM=iant, alex.brainman R=golang-codereviews, iant, alex.brainman CC=golang-codereviews https://golang.org/cl/147820043 --- src/runtime/mem_windows.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/runtime/mem_windows.c b/src/runtime/mem_windows.c index 7bc028bf3a..6ea992020c 100644 --- a/src/runtime/mem_windows.c +++ b/src/runtime/mem_windows.c @@ -68,10 +68,22 @@ void runtime·SysUsed(void *v, uintptr n) { void *r; + uintptr small; r = runtime·stdcall4(runtime·VirtualAlloc, (uintptr)v, n, MEM_COMMIT, PAGE_READWRITE); if(r != v) runtime·throw("runtime: failed to commit pages"); + + // Commit failed. See SysUnused. + while(n > 0) { + small = n; + while(small >= 4096 && runtime·stdcall4(runtime·VirtualAlloc, (uintptr)v, small, MEM_COMMIT, PAGE_READWRITE) == nil) + small = (small / 2) & ~(4096-1); + if(small < 4096) + runtime·throw("runtime: failed to decommit pages"); + v = (byte*)v + small; + n -= small; + } } void -- 2.48.1