From 62ccc230241eb22d38068cb09b18c29ad1fbf7cb 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 --- ioutils/readers.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/ioutils/readers.go b/ioutils/readers.go index ff09baa..9e454b0 100644 --- a/ioutils/readers.go +++ b/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,