unixfs/tar: Fixed reader not properly buffering headers
Matt Bell committed
Jan 24, 2015 at 05:35 UTC
16c45a7587cc3b72df763fedcfa370692bf46cc4
1 file changed
+8
-7
unixfs/tar/reader.go
+8
-7
@@ -79,6 +79,7 @@ func (i *Reader) writeToBuf(dagnode *mdag.Node, path string, depth int) {
79
i.emitError(err)
80
return
81
}
82
+ i.flush()
83
84
for _, link := range dagnode.Links {
85
childNode, err := link.GetNode(i.dag)
@@ -102,6 +103,7 @@ func (i *Reader) writeToBuf(dagnode *mdag.Node, path string, depth int) {
103
i.emitError(err)
104
return
105
}
106
+ i.flush()
107
108
reader, err := uio.NewDagReader(dagnode, i.dag)
109
if err != nil {
@@ -150,6 +152,11 @@ func (i *Reader) signal() {
152
i.signalChan <- struct{}{}
153
}
154
155
+func (i *Reader) flush() {
156
+ i.signal()
157
+ <-i.signalChan
158
+}
159
+
160
func (i *Reader) emitError(err error) {
161
i.err = err
162
i.signal()
@@ -157,10 +164,6 @@ func (i *Reader) emitError(err error) {
164
165
func (i *Reader) close() {
166
i.closed = true
160
- i.flush()
161
-}
162
-
163
-func (i *Reader) flush() {
167
defer i.signal()
168
err := i.writer.Close()
169
if err != nil {
@@ -185,9 +188,7 @@ func (i *Reader) syncCopy(reader io.Reader) error {
188
if err != nil {
189
return err
190
}
188
- i.signal()
189
- // wait for Read to finish reading
190
- <-i.signalChan
191
+ i.flush()
192
}
193
if err == io.EOF {
194
break