net: avoid allocation in setAddr
setAddr was showing up in profiles due to string concatenation construction the os.File name field. netFD.sysfile's Name() is never used, except in dup() so I believe it is safe to avoid this allocation.
R=mikioh.mikioh, rsc
CC=golang-dev
https://golang.org/cl/6742058
diff --git a/src/pkg/net/fd_unix.go b/src/pkg/net/fd_unix.go
index e231c3e..7231742 100644
--- a/src/pkg/net/fd_unix.go
+++ b/src/pkg/net/fd_unix.go
@@ -312,14 +312,18 @@
func (fd *netFD) setAddr(laddr, raddr Addr) {
fd.laddr = laddr
fd.raddr = raddr
+ fd.sysfile = os.NewFile(uintptr(fd.sysfd), fd.net)
+}
+
+func (fd *netFD) name() string {
var ls, rs string
- if laddr != nil {
- ls = laddr.String()
+ if fd.laddr != nil {
+ ls = fd.laddr.String()
}
- if raddr != nil {
- rs = raddr.String()
+ if fd.raddr != nil {
+ rs = fd.raddr.String()
}
- fd.sysfile = os.NewFile(uintptr(fd.sysfd), fd.net+":"+ls+"->"+rs)
+ return fd.net + ":" + ls + "->" + rs
}
func (fd *netFD) connect(ra syscall.Sockaddr) error {
@@ -660,7 +664,7 @@
return nil, &OpError{"setnonblock", fd.net, fd.laddr, err}
}
- return os.NewFile(uintptr(ns), fd.sysfile.Name()), nil
+ return os.NewFile(uintptr(ns), fd.name()), nil
}
func closesocket(s int) error {