Commit 568a449b authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

io/ioutil: use sync.Pool in Discard

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
parent 1334b794
// 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:
}
}
......@@ -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
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment