Browse code

pkg/tarsum: avoid buf2 allocation in Read

Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)

unclejack authored on 2014/08/17 20:29:46
Showing 1 changed files
... ...
@@ -23,6 +23,7 @@ type TarSum struct {
23 23
 	gz                 writeCloseFlusher
24 24
 	bufTar             *bytes.Buffer
25 25
 	bufGz              *bytes.Buffer
26
+	bufData            [8192]byte
26 27
 	h                  hash.Hash
27 28
 	sums               map[string]string
28 29
 	currentFile        string
... ...
@@ -92,7 +93,12 @@ func (ts *TarSum) Read(buf []byte) (int, error) {
92 92
 	if ts.finished {
93 93
 		return ts.bufGz.Read(buf)
94 94
 	}
95
-	buf2 := make([]byte, len(buf), cap(buf))
95
+	var buf2 []byte
96
+	if len(buf) > 8192 {
97
+		buf2 = make([]byte, len(buf), cap(buf))
98
+	} else {
99
+		buf2 = ts.bufData[:len(buf)-1]
100
+	}
96 101
 
97 102
 	n, err := ts.tarR.Read(buf2)
98 103
 	if err != nil {