@cryptotaxi247 / kubo / commits / 16c45a758

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