1
0
mirror of https://github.com/golang/go synced 2024-11-18 08:04:40 -07:00

syscall: copy original rlimit before modifying

CL 531516 converted origRlimitNofile from an atomic.Value to
atomic.Pointer[Rlimit]. i.e., it changed from storing a value to storing
a pointer.

After storing a pointer to lim, the remainder of this function
immediately modifies it, thus mutating the value pointer to by
origRlimitNofile (and thus defeating the point of origRlimitNofile).

This broke the android-amd64-emu builder because it is (apparently) the
only builder where the original RLIMIT_NOFILE Cur != Max.
TestRlimitRestored is skipped on every other builder.

Change-Id: I12076350eeddfd221823ad651e7e7eca59d2bdcd
Reviewed-on: https://go-review.googlesource.com/c/go/+/532100
Run-TryBot: Michael Pratt <mpratt@google.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Michael Pratt 2023-10-02 15:55:29 -04:00 committed by Gopher Robot
parent ef3171c5eb
commit 122b35e838

View File

@ -31,9 +31,10 @@ func init() {
var lim Rlimit
if err := Getrlimit(RLIMIT_NOFILE, &lim); err == nil && lim.Cur != lim.Max {
origRlimitNofile.Store(&lim)
lim.Cur = lim.Max
adjustFileLimit(&lim)
setrlimit(RLIMIT_NOFILE, &lim)
nlim := lim
nlim.Cur = nlim.Max
adjustFileLimit(&nlim)
setrlimit(RLIMIT_NOFILE, &nlim)
}
}