internal/poll: avoid unnecessary memory allocation in Writev

Writev was allocating a new []syscall.Iovec every call, rather than
reusing the cached copy available at *fd.iovec.

Fixes #26663.

Change-Id: I5967b0d82dc671ce0eaf4ec36cc2a0e46eadde02
Reviewed-on: https://go-review.googlesource.com/c/go/+/172419
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Matthew Dempsky 2019-04-16 15:52:05 -07:00
parent d7df9de5a2
commit 33e5da48d5
1 changed files with 4 additions and 1 deletions

View File

@ -51,7 +51,10 @@ func (fd *FD) Writev(v *[][]byte) (int64, error) {
if len(iovecs) == 0 {
break
}
fd.iovecs = &iovecs // cache
if fd.iovecs == nil {
fd.iovecs = new([]syscall.Iovec)
}
*fd.iovecs = iovecs // cache
var wrote uintptr
wrote, err = writev(fd.Sysfd, iovecs)