mirror of https://github.com/golang/go.git
internal/poll: remove allocation in windows FD.Writev
Use closure parameter instead of external variable to
remove 1 allocation.
I tried to add test, but it is difficult to add something simple
and not flake here. I did test this with:
diff --git a/src/net/writev_test.go b/src/net/writev_test.go
index 4c05be4..e417d68 100644
--- a/src/net/writev_test.go
+++ b/src/net/writev_test.go
@@ -99,6 +99,15 @@ func TestBuffers_WriteTo(t *testing.T) {
}
}
+func TestBuffers_WriteToAllocs(t *testing.T) {
+ allocs := testing.AllocsPerRun(10, func() {
+ testBuffer_writeTo(t, 10, false)
+ })
+ if allocs > 0 {
+ t.Fatalf("got %v; want 0", allocs)
+ }
+}
+
func testBuffer_writeTo(t *testing.T, chunks int, useCopy bool) {
oldHook := poll.TestHookDidWritev
defer func() { poll.TestHookDidWritev = oldHook }()
It makes allocation count go down by 1 after the fix.
Before:
C:\>u:\test -test.v -test.run=WriteToAllocs
=== RUN TestBuffers_WriteToAllocs
--- FAIL: TestBuffers_WriteToAllocs (0.05s)
writev_test.go:107: got 66; want 0
FAIL
and after:
C:\>u:\test -test.v -test.run=WriteToAllocs
=== RUN TestBuffers_WriteToAllocs
--- FAIL: TestBuffers_WriteToAllocs (0.04s)
writev_test.go:107: got 65; want 0
FAIL
Thanks to @MichaelMonashev for report and the fix.
Fixes #19222
Change-Id: I0f73cd9e2c8bbaa0653083f81f3ccb83b5ea84e1
Reviewed-on: https://go-review.googlesource.com/42893
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
45d42fdcea
commit
ddcb975ffc
|
|
@ -686,7 +686,7 @@ func (fd *FD) Writev(buf *[][]byte) (int64, error) {
|
|||
o := &fd.wop
|
||||
o.InitBufs(buf)
|
||||
n, err := wsrv.ExecIO(o, "WSASend", func(o *operation) error {
|
||||
return syscall.WSASend(o.fd.Sysfd, &o.bufs[0], uint32(len(*buf)), &o.qty, 0, &o.o, nil)
|
||||
return syscall.WSASend(o.fd.Sysfd, &o.bufs[0], uint32(len(o.bufs)), &o.qty, 0, &o.o, nil)
|
||||
})
|
||||
o.ClearBufs()
|
||||
TestHookDidWritev(n)
|
||||
|
|
|
|||
Loading…
Reference in New Issue