]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: improve out-of-memory message when VirtualAlloc fails
authorAustin Clements <austin@google.com>
Tue, 18 Jul 2017 15:14:28 +0000 (11:14 -0400)
committerAustin Clements <austin@google.com>
Fri, 21 Jul 2017 01:00:33 +0000 (01:00 +0000)
Fixes #19514.

Change-Id: I93600d5c3d11ecab5a47dd4cd55ed3aea05e221e
Reviewed-on: https://go-review.googlesource.com/49611
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/mem_windows.go

index 2c338c8a8c2b59a5a9c0296acb036f40b475b58b..c37c82ab67eb8c4836c1b297a379ff69c5398616 100644 (file)
@@ -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")
+               }
        }
 }