From 277aa9c67415b9b76ab17daea583b51f8560a6a5 Mon Sep 17 00:00:00 2001 From: unclejack Date: Wed, 17 Sep 2014 16:50:56 +0300 Subject: [PATCH] stdcopy: improve perf by avoiding buffer growth Docker-DCO-1.1-Signed-off-by: Cristian Staretu (github: unclejack) --- pkg/stdcopy/stdcopy.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/pkg/stdcopy/stdcopy.go b/pkg/stdcopy/stdcopy.go index b50c31dd49..79e15bc852 100644 --- a/pkg/stdcopy/stdcopy.go +++ b/pkg/stdcopy/stdcopy.go @@ -29,14 +29,22 @@ type StdWriter struct { } func (w *StdWriter) Write(buf []byte) (n int, err error) { + var n1, n2 int if w == nil || w.Writer == nil { return 0, errors.New("Writer not instanciated") } binary.BigEndian.PutUint32(w.prefix[4:], uint32(len(buf))) - buf = append(w.prefix[:], buf...) - - n, err = w.Writer.Write(buf) - return n - StdWriterPrefixLen, err + n1, err = w.Writer.Write(w.prefix[:]) + if err != nil { + n = n1 - StdWriterPrefixLen + } else { + n2, err = w.Writer.Write(buf) + n = n1 + n2 - StdWriterPrefixLen + } + if n < 0 { + n = 0 + } + return } // NewStdWriter instanciates a new Writer.