From: Alex Brainman Date: Tue, 24 Nov 2015 03:29:06 +0000 (+1100) Subject: runtime: fix handling VirtualAlloc failure in sysUsed X-Git-Tag: go1.6beta1~319 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1cb53ce36bc8b69e2f3ed9113d3b0f1d9d0d1405;p=gostls13.git runtime: fix handling VirtualAlloc failure in sysUsed Original code is mistakenly panics on VirtualAlloc failure - we want it to go looking for smaller memory region that VirtualAlloc will succeed to allocate. Also return immediately if VirtualAlloc succeeds. See rsc comment on issue #12587 for details. I still don't have a test for this. So I can only hope that this Fixes #12587 Change-Id: I052068ec627fdcb466c94ae997ad112016f734b7 Reviewed-on: https://go-review.googlesource.com/17169 Reviewed-by: Russ Cox --- diff --git a/src/runtime/mem_windows.go b/src/runtime/mem_windows.go index 50fca95b4f..71be0e66f0 100644 --- a/src/runtime/mem_windows.go +++ b/src/runtime/mem_windows.go @@ -58,9 +58,8 @@ func sysUnused(v unsafe.Pointer, n uintptr) { func sysUsed(v unsafe.Pointer, n uintptr) { r := stdcall4(_VirtualAlloc, uintptr(v), n, _MEM_COMMIT, _PAGE_READWRITE) - if r != uintptr(v) { - print("runtime: VirtualAlloc of ", n, " bytes failed with errno=", getlasterror(), "\n") - throw("runtime: failed to commit pages") + if r == uintptr(v) { + return } // Commit failed. See SysUnused.