Skip to content

Commit 54ed9fe

Browse files
rscwheatman
authored andcommitted
runtime: fix Windows SysUsed
Same fix as for SysUnused. Fixes golang#8038. LGTM=iant, alex.brainman R=golang-codereviews, iant, alex.brainman CC=golang-codereviews https://golang.org/cl/147820043
1 parent 29e6424 commit 54ed9fe

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

src/runtime/mem_windows.c

+12
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,22 @@ void
6868
runtime·SysUsed(void *v, uintptr n)
6969
{
7070
void *r;
71+
uintptr small;
7172

7273
r = runtime·stdcall4(runtime·VirtualAlloc, (uintptr)v, n, MEM_COMMIT, PAGE_READWRITE);
7374
if(r != v)
7475
runtime·throw("runtime: failed to commit pages");
76+
77+
// Commit failed. See SysUnused.
78+
while(n > 0) {
79+
small = n;
80+
while(small >= 4096 && runtime·stdcall4(runtime·VirtualAlloc, (uintptr)v, small, MEM_COMMIT, PAGE_READWRITE) == nil)
81+
small = (small / 2) & ~(4096-1);
82+
if(small < 4096)
83+
runtime·throw("runtime: failed to decommit pages");
84+
v = (byte*)v + small;
85+
n -= small;
86+
}
7587
}
7688

7789
void

0 commit comments

Comments
 (0)