From 40ea67a5962d5e47f883421a637c93b888206677 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Tue, 28 Jul 2015 12:52:27 -0700 Subject: [PATCH] Fix reset timeout for buffer readers. Use our goroutine-safe random source. Signed-off-by: David Calavera --- pkg/ioutils/readers.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pkg/ioutils/readers.go b/pkg/ioutils/readers.go index ff09baad17..9e454b0eb8 100644 --- a/pkg/ioutils/readers.go +++ b/pkg/ioutils/readers.go @@ -2,15 +2,18 @@ package ioutils import ( "bytes" - "crypto/rand" "crypto/sha256" "encoding/hex" "io" - "math/big" + "math/rand" "sync" "time" + + "github.com/docker/docker/pkg/random" ) +var rndSrc = random.NewSource() + type readCloserWrapper struct { io.Reader closer func() error @@ -66,18 +69,14 @@ type bufReader struct { } func NewBufReader(r io.Reader) *bufReader { - var timeout int - if randVal, err := rand.Int(rand.Reader, big.NewInt(120)); err == nil { - timeout = int(randVal.Int64()) + 180 - } else { - timeout = 300 - } + timeout := rand.New(rndSrc).Intn(120) + 180 + reader := &bufReader{ buf: &bytes.Buffer{}, drainBuf: make([]byte, 1024), reuseBuf: make([]byte, 4096), maxReuse: 1000, - resetTimeout: time.Second * time.Duration(timeout), + resetTimeout: time.Duration(timeout) * time.Second, bufLenResetThreshold: 100 * 1024, maxReadDataReset: 10 * 1024 * 1024, reader: r,