]> Cypherpunks repositories - gostls13.git/commitdiff
net: don't allocate dialer closure if we won't use it
authorDmitry Vyukov <dvyukov@google.com>
Sun, 8 Feb 2015 16:00:43 +0000 (19:00 +0300)
committerDmitry Vyukov <dvyukov@google.com>
Mon, 9 Feb 2015 08:30:40 +0000 (08:30 +0000)
When we use dialMulti we also allocate dialSingle closure for no reason.

Change-Id: I074282a9d6e2c2a1063ab311a1b95e10fe65219f
Reviewed-on: https://go-review.googlesource.com/4119
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/net/dial.go

index e6f0436cdd30f5a7dbe116592c9ba7b1fcae99d8..0424ed250f741f90c59286b3074831dc667fc936 100644 (file)
@@ -159,13 +159,15 @@ func (d *Dialer) Dial(network, address string) (Conn, error) {
        if err != nil {
                return nil, &OpError{Op: "dial", Net: network, Addr: nil, Err: err}
        }
-       dialer := func(deadline time.Time) (Conn, error) {
-               return dialSingle(network, address, d.LocalAddr, ra.toAddr(), deadline)
-       }
+       var dialer func(deadline time.Time) (Conn, error)
        if ras, ok := ra.(addrList); ok && d.DualStack && network == "tcp" {
                dialer = func(deadline time.Time) (Conn, error) {
                        return dialMulti(network, address, d.LocalAddr, ras, deadline)
                }
+       } else {
+               dialer = func(deadline time.Time) (Conn, error) {
+                       return dialSingle(network, address, d.LocalAddr, ra.toAddr(), deadline)
+               }
        }
        c, err := dial(network, ra.toAddr(), dialer, d.deadline())
        if d.KeepAlive > 0 && err == nil {