Skip to content

Commit

Permalink
syscall: use RLIMIT_CPU instead of RLIMIT_NOFILE
Browse files Browse the repository at this point in the history
The latter is subject to kern.maxfilelimit restrictions on darwin which
are not reflected in the return value. This makes it difficult to
reliably restore the default after the test is complete. RLIMIT_CPU
should hopefully sidestep this problem.

Updates #40564.

Change-Id: Ifb33c7d46f2708130cef366dc245c643a2d5e465
Reviewed-on: https://go-review.googlesource.com/c/go/+/383234
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Trust: Bryan Mills <bcmills@google.com>
  • Loading branch information
tamird authored and ianlancetaylor committed Feb 9, 2022
1 parent 2e2ef31 commit ea3c546
Showing 1 changed file with 4 additions and 17 deletions.
21 changes: 4 additions & 17 deletions src/syscall/syscall_unix_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -328,40 +328,27 @@ func TestUnixRightsRoundtrip(t *testing.T) {

func TestRlimit(t *testing.T) {
var rlimit, zero syscall.Rlimit
err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlimit)
if err != nil {
if err := syscall.Getrlimit(syscall.RLIMIT_CPU, &rlimit); err != nil {
t.Fatalf("Getrlimit: save failed: %v", err)
}
if zero == rlimit {
t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit)
}
set := rlimit
set.Cur = set.Max - 1
if (runtime.GOOS == "darwin" || runtime.GOOS == "ios") && set.Cur > 4096 {
// rlim_min for RLIMIT_NOFILE should be equal to
// or lower than kern.maxfilesperproc, which on
// some machines are 4096. See #40564.
set.Cur = 4096
}
err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &set)
if err != nil {
if err := syscall.Setrlimit(syscall.RLIMIT_CPU, &set); err != nil {
t.Fatalf("Setrlimit: set failed: %#v %v", set, err)
}
var get syscall.Rlimit
err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &get)
if err != nil {
if err := syscall.Getrlimit(syscall.RLIMIT_CPU, &get); err != nil {
t.Fatalf("Getrlimit: get failed: %v", err)
}
set = rlimit
set.Cur = set.Max - 1
if (runtime.GOOS == "darwin" || runtime.GOOS == "ios") && set.Cur > 4096 {
set.Cur = 4096
}
if set != get {
t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get)
}
err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rlimit)
if err != nil {
if err := syscall.Setrlimit(syscall.RLIMIT_CPU, &rlimit); err != nil {
t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err)
}
}
Expand Down

0 comments on commit ea3c546

Please sign in to comment.