From: Austin Clements Date: Tue, 18 Jul 2017 15:14:28 +0000 (-0400) Subject: runtime: improve out-of-memory message when VirtualAlloc fails X-Git-Tag: go1.9rc1~10 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=fa3c5173a5ab4d011cf77ab9775e677d2a9682ea;p=gostls13.git runtime: improve out-of-memory message when VirtualAlloc fails Fixes #19514. Change-Id: I93600d5c3d11ecab5a47dd4cd55ed3aea05e221e Reviewed-on: https://go-review.googlesource.com/49611 Run-TryBot: Austin Clements TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- diff --git a/src/runtime/mem_windows.go b/src/runtime/mem_windows.go index 2c338c8a8c..c37c82ab67 100644 --- a/src/runtime/mem_windows.go +++ b/src/runtime/mem_windows.go @@ -16,6 +16,9 @@ const ( _PAGE_READWRITE = 0x0004 _PAGE_NOACCESS = 0x0001 + + _ERROR_NOT_ENOUGH_MEMORY = 8 + _ERROR_COMMITMENT_LIMIT = 1455 ) // Don't split the stack as this function may be invoked without a valid G, @@ -112,7 +115,13 @@ func sysMap(v unsafe.Pointer, n uintptr, reserved bool, sysStat *uint64) { mSysStatInc(sysStat, n) p := stdcall4(_VirtualAlloc, uintptr(v), n, _MEM_COMMIT, _PAGE_READWRITE) if p != uintptr(v) { - print("runtime: VirtualAlloc of ", n, " bytes failed with errno=", getlasterror(), "\n") - throw("runtime: cannot map pages in arena address space") + errno := getlasterror() + print("runtime: VirtualAlloc of ", n, " bytes failed with errno=", errno, "\n") + switch errno { + case _ERROR_NOT_ENOUGH_MEMORY, _ERROR_COMMITMENT_LIMIT: + throw("out of memory") + default: + throw("runtime: cannot map pages in arena address space") + } } }