From d2512aff877a91e8cf8fa97602297f17e5b5d3f2 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 21 Dec 2016 13:50:28 -0800 Subject: [PATCH] misc/cgo/test: limit issue18146 attempts based on RLIMIT_NPROC Fixes #18381. Change-Id: I0a476cd7f6182c8d4646628477c56c133d5671ee Reviewed-on: https://go-review.googlesource.com/34667 Run-TryBot: Ian Lance Taylor Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- misc/cgo/test/issue18146.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/misc/cgo/test/issue18146.go b/misc/cgo/test/issue18146.go index 19c52b6fd5..ffb04e9037 100644 --- a/misc/cgo/test/issue18146.go +++ b/misc/cgo/test/issue18146.go @@ -37,6 +37,31 @@ func test18146(t *testing.T) { attempts = 100 } + // Restrict the number of attempts based on RLIMIT_NPROC. + // Tediously, RLIMIT_NPROC was left out of the syscall package, + // probably because it is not in POSIX.1, so we define it here. + // It is not defined on Solaris. + var nproc int + setNproc := true + switch runtime.GOOS { + default: + setNproc = false + case "linux": + nproc = 6 + case "darwin", "dragonfly", "freebsd", "netbsd", "openbsd": + nproc = 7 + } + if setNproc { + var rlim syscall.Rlimit + if syscall.Getrlimit(nproc, &rlim) == nil { + max := int(rlim.Cur) / (threads + 5) + if attempts > max { + t.Logf("lowering attempts from %d to %d for RLIMIT_NPROC", attempts, max) + attempts = max + } + } + } + if os.Getenv("test18146") == "exec" { runtime.GOMAXPROCS(1) for n := threads; n > 0; n-- { -- 2.48.1