aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2018-08-02 19:15:25 +0000
committerBrad Fitzpatrick <bradfitz@golang.org>2018-08-21 04:39:22 +0000
commit80fe2e6e37120e665cd523e1edf7eb1401b9b73b (patch)
treeee9ccbe132a967e3c349513e02e57ae6d17a132b /src
parent827248484004300c52162d55dfa05083862062ed (diff)
downloadgo-80fe2e6e37120e665cd523e1edf7eb1401b9b73b.tar.xz
net: lazily look up the listenerBacklog value on first use
Don't open files or do sysctls in init. Updates #26775 Change-Id: I017bed6c24ef1e4bc30040120349fb779f203225 Reviewed-on: https://go-review.googlesource.com/127655 Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/net/net.go11
-rw-r--r--src/net/sock_posix.go2
2 files changed, 11 insertions, 2 deletions
diff --git a/src/net/net.go b/src/net/net.go
index c909986269..77b8f69074 100644
--- a/src/net/net.go
+++ b/src/net/net.go
@@ -357,7 +357,16 @@ type PacketConn interface {
SetWriteDeadline(t time.Time) error
}
-var listenerBacklog = maxListenerBacklog()
+var listenerBacklogCache struct {
+ sync.Once
+ val int
+}
+
+// listenerBacklog is a caching wrapper around maxListenerBacklog.
+func listenerBacklog() int {
+ listenerBacklogCache.Do(func() { listenerBacklogCache.val = maxListenerBacklog() })
+ return listenerBacklogCache.val
+}
// A Listener is a generic network listener for stream-oriented protocols.
//
diff --git a/src/net/sock_posix.go b/src/net/sock_posix.go
index 677e423ffa..1cfd8a58c6 100644
--- a/src/net/sock_posix.go
+++ b/src/net/sock_posix.go
@@ -54,7 +54,7 @@ func socket(ctx context.Context, net string, family, sotype, proto int, ipv6only
if laddr != nil && raddr == nil {
switch sotype {
case syscall.SOCK_STREAM, syscall.SOCK_SEQPACKET:
- if err := fd.listenStream(laddr, listenerBacklog, ctrlFn); err != nil {
+ if err := fd.listenStream(laddr, listenerBacklog(), ctrlFn); err != nil {
fd.Close()
return nil, err
}