From: Ian Lance Taylor Date: Wed, 29 Jun 2016 00:06:59 +0000 (-0700) Subject: runtime: better error message for newosproc failure X-Git-Tag: go1.7rc1~29 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c7ae41e5770b2258074eee68a6a3c4d0d71a251f;p=gostls13.git runtime: better error message for newosproc failure 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 TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- diff --git a/src/runtime/os3_solaris.go b/src/runtime/os3_solaris.go index 349f4abbcf..9368e0d5c6 100644 --- a/src/runtime/os3_solaris.go +++ b/src/runtime/os3_solaris.go @@ -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") } } diff --git a/src/runtime/os_dragonfly.go b/src/runtime/os_dragonfly.go index 78a150eee5..85d4aadbfe 100644 --- a/src/runtime/os_dragonfly.go +++ b/src/runtime/os_dragonfly.go @@ -134,6 +134,7 @@ func newosproc(mp *m, stk unsafe.Pointer) { tid2: nil, } + // TODO: Check for error. lwp_create(¶ms) sigprocmask(_SIG_SETMASK, &oset, nil) } diff --git a/src/runtime/os_freebsd.go b/src/runtime/os_freebsd.go index 3a73b66277..c187ee805f 100644 --- a/src/runtime/os_freebsd.go +++ b/src/runtime/os_freebsd.go @@ -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(¶m, int32(unsafe.Sizeof(param))) sigprocmask(_SIG_SETMASK, &oset, nil) } diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go index 35b57d8a23..542f214a42 100644 --- a/src/runtime/os_linux.go +++ b/src/runtime/os_linux.go @@ -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") } } diff --git a/src/runtime/os_netbsd.go b/src/runtime/os_netbsd.go index 41f34f7132..4c44b2bb20 100644 --- a/src/runtime/os_netbsd.go +++ b/src/runtime/os_netbsd.go @@ -20,6 +20,8 @@ const ( // From NetBSD's _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") } } diff --git a/src/runtime/os_openbsd.go b/src/runtime/os_openbsd.go index ded6b1d4ea..9a5c53ef9e 100644 --- a/src/runtime/os_openbsd.go +++ b/src/runtime/os_openbsd.go @@ -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") } }