]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: better error message for newosproc failure
authorIan Lance Taylor <iant@golang.org>
Wed, 29 Jun 2016 00:06:59 +0000 (17:06 -0700)
committerIan Lance Taylor <iant@golang.org>
Wed, 29 Jun 2016 01:37:19 +0000 (01:37 +0000)
If creating a new thread fails with EAGAIN, point the user at ulimit.

Fixes #15476.

Change-Id: Ib36519614b5c72776ea7f218a0c62df1dd91a8ea
Reviewed-on: https://go-review.googlesource.com/24570
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/os3_solaris.go
src/runtime/os_dragonfly.go
src/runtime/os_freebsd.go
src/runtime/os_linux.go
src/runtime/os_netbsd.go
src/runtime/os_openbsd.go

index 349f4abbcf028d784f52dafbb2e83b9f8ba8774e..9368e0d5c62b1e0065ca5482db81401da8ee9244 100644 (file)
@@ -165,6 +165,9 @@ func newosproc(mp *m, _ unsafe.Pointer) {
        sigprocmask(_SIG_SETMASK, &oset, nil)
        if ret != 0 {
                print("runtime: failed to create new OS thread (have ", mcount(), " already; errno=", ret, ")\n")
+               if ret == -_EAGAIN {
+                       println("runtime: may need to increase max user processes (ulimit -u)")
+               }
                throw("newosproc")
        }
 }
index 78a150eee5598a960f845313234b4aaf25c4c0f4..85d4aadbfec7c16d076e4e5a21d0350cbba7d3aa 100644 (file)
@@ -134,6 +134,7 @@ func newosproc(mp *m, stk unsafe.Pointer) {
                tid2:       nil,
        }
 
+       // TODO: Check for error.
        lwp_create(&params)
        sigprocmask(_SIG_SETMASK, &oset, nil)
 }
index 3a73b6627743e37bfdca36b1a183c2fead042ff3..c187ee805f68d07b246732fd37afce5fccc9df54 100644 (file)
@@ -121,6 +121,7 @@ func newosproc(mp *m, stk unsafe.Pointer) {
 
        var oset sigset
        sigprocmask(_SIG_SETMASK, &sigset_all, &oset)
+       // TODO: Check for error.
        thr_new(&param, int32(unsafe.Sizeof(param)))
        sigprocmask(_SIG_SETMASK, &oset, nil)
 }
index 35b57d8a23090dcd2b6913583f4fbc1837967b4e..542f214a42140980eb79f22d675ab284a04b1314 100644 (file)
@@ -154,6 +154,9 @@ func newosproc(mp *m, stk unsafe.Pointer) {
 
        if ret < 0 {
                print("runtime: failed to create new OS thread (have ", mcount(), " already; errno=", -ret, ")\n")
+               if ret == -_EAGAIN {
+                       println("runtime: may need to increase max user processes (ulimit -u)")
+               }
                throw("newosproc")
        }
 }
index 41f34f71321a98b1cd360ddba5ffc063d6dcbf5d..4c44b2bb2020cf6f944bffa706097b3f1d06bb9d 100644 (file)
@@ -20,6 +20,8 @@ const (
        // From NetBSD's <sys/ucontext.h>
        _UC_SIGMASK = 0x01
        _UC_CPU     = 0x04
+
+       _EAGAIN = 35
 )
 
 type mOS struct {
@@ -162,6 +164,9 @@ func newosproc(mp *m, stk unsafe.Pointer) {
        ret := lwp_create(unsafe.Pointer(&uc), 0, unsafe.Pointer(&mp.procid))
        if ret < 0 {
                print("runtime: failed to create new OS thread (have ", mcount()-1, " already; errno=", -ret, ")\n")
+               if ret == -_EAGAIN {
+                       println("runtime: may need to increase max user processes (ulimit -p)")
+               }
                throw("runtime.newosproc")
        }
 }
index ded6b1d4ea4a83ead841790e890c4e255278b3ac..9a5c53ef9ec98f1eb8816dcccb60c2934066e840 100644 (file)
@@ -154,6 +154,9 @@ func newosproc(mp *m, stk unsafe.Pointer) {
 
        if ret < 0 {
                print("runtime: failed to create new OS thread (have ", mcount()-1, " already; errno=", -ret, ")\n")
+               if ret == -_EAGAIN {
+                       println("runtime: may need to increase max user processes (ulimit -p)")
+               }
                throw("runtime.newosproc")
        }
 }