]> Cypherpunks repositories - gostls13.git/commitdiff
io/ioutil: use sync.Pool in Discard
authorBrad Fitzpatrick <bradfitz@golang.org>
Fri, 20 Dec 2013 17:38:35 +0000 (09:38 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 20 Dec 2013 17:38:35 +0000 (09:38 -0800)
And merge the blackhole.go file back into ioutil,
where it once was. It was only in a separate file
because it used to have race-vs-!race versions.

R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/44060044

src/pkg/io/ioutil/blackhole.go [deleted file]
src/pkg/io/ioutil/ioutil.go

diff --git a/src/pkg/io/ioutil/blackhole.go b/src/pkg/io/ioutil/blackhole.go
deleted file mode 100644 (file)
index 101d2c1..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package ioutil
-
-var blackHoleBuf = make(chan []byte, 1)
-
-func blackHole() []byte {
-       select {
-       case b := <-blackHoleBuf:
-               return b
-       default:
-       }
-       return make([]byte, 8192)
-}
-
-func blackHolePut(p []byte) {
-       select {
-       case blackHoleBuf <- p:
-       default:
-       }
-}
index b2508b7899ea6d39e05f23ad6c756000f50778e8..909a8156326735dbfaca50dca573dcf38b8facfa 100644 (file)
@@ -10,6 +10,7 @@ import (
        "io"
        "os"
        "sort"
+       "sync"
 )
 
 // readAll reads from r until an error or EOF and returns the data it read
@@ -136,14 +137,21 @@ func (devNull) WriteString(s string) (int, error) {
        return len(s), nil
 }
 
+var blackHolePool = sync.Pool{
+       New: func() interface{} {
+               b := make([]byte, 8192)
+               return &b
+       },
+}
+
 func (devNull) ReadFrom(r io.Reader) (n int64, err error) {
-       buf := blackHole()
-       defer blackHolePut(buf)
+       bufp := blackHolePool.Get().(*[]byte)
        readSize := 0
        for {
-               readSize, err = r.Read(buf)
+               readSize, err = r.Read(*bufp)
                n += int64(readSize)
                if err != nil {
+                       blackHolePool.Put(bufp)
                        if err == io.EOF {
                                return n, nil
                        }