]> Cypherpunks repositories - gostls13.git/commitdiff
misc/cgo/test: limit issue18146 attempts based on RLIMIT_NPROC
authorIan Lance Taylor <iant@golang.org>
Wed, 21 Dec 2016 21:50:28 +0000 (13:50 -0800)
committerIan Lance Taylor <iant@golang.org>
Wed, 21 Dec 2016 22:50:41 +0000 (22:50 +0000)
Fixes #18381.

Change-Id: I0a476cd7f6182c8d4646628477c56c133d5671ee
Reviewed-on: https://go-review.googlesource.com/34667
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

misc/cgo/test/issue18146.go

index 19c52b6fd5d1bd4fa583127e477123e9fb9d2b2a..ffb04e9037ba4e1db7e35fabda86ef9011e2587a 100644 (file)
@@ -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-- {