]> Cypherpunks repositories - gostls13.git/commit
internal/poll: remove allocation in windows FD.Writev
authorAlex Brainman <alex.brainman@gmail.com>
Sun, 30 Apr 2017 08:21:16 +0000 (18:21 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Mon, 8 May 2017 01:50:49 +0000 (01:50 +0000)
commitddcb975ffc05f4b41b063beb5613081fd081fce1
treed6fcc754ac2b7d3109482cedfaa2e95eb8ca9623
parent45d42fdceaa60a51c0057222df5dace810ed13de
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>
src/internal/poll/fd_windows.go