]> Cypherpunks repositories - gostls13.git/commitdiff
net: lazily look up the listenerBacklog value on first use
authorBrad Fitzpatrick <bradfitz@golang.org>
Thu, 2 Aug 2018 19:15:25 +0000 (19:15 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 21 Aug 2018 04:39:22 +0000 (04:39 +0000)
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>
src/net/net.go
src/net/sock_posix.go

index c9099862699068a1c5b9c11ddec8b9aa36b75470..77b8f69074e39c4f3f13e39a4027ed7d10253f77 100644 (file)
@@ -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.
 //
index 677e423ffaff2b353abb458f906fe86217832175..1cfd8a58c604bc78f776171c4e8d5982ab91ffd9 100644 (file)
@@ -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
                        }