1
0
Fork 0
forked from mirrors/tar-split

tar/asm: fix a goroutine deadlock

This commit is contained in:
Vincent Batts 2015-03-06 16:30:48 -05:00
parent 137c8e61c9
commit ecf0ed43a1

View file

@ -70,11 +70,13 @@ func NewInputTarStream(r io.Reader, p storage.Packer, fp FilePutter) (io.Reader,
pW.CloseWithError(err) pW.CloseWithError(err)
} }
sumChan := make(chan []byte) var csum []byte
if hdr.Size > 0 { if hdr.Size > 0 {
sumChan := make(chan []byte)
// if there is a file payload to write, then write the file to the FilePutter // if there is a file payload to write, then write the file to the FilePutter
fileRdr, fileWrtr := io.Pipe() fileRdr, fileWrtr := io.Pipe()
go func() { go func() {
defer close(sumChan)
_, csum, err := fp.Put(hdr.Name, fileRdr) _, csum, err := fp.Put(hdr.Name, fileRdr)
if err != nil { if err != nil {
pW.CloseWithError(err) pW.CloseWithError(err)
@ -86,13 +88,15 @@ func NewInputTarStream(r io.Reader, p storage.Packer, fp FilePutter) (io.Reader,
return return
} }
fileWrtr.Close() fileWrtr.Close()
csum = <-sumChan
} }
// File entries added, regardless of size // File entries added, regardless of size
_, err = p.AddEntry(storage.Entry{ _, err = p.AddEntry(storage.Entry{
Type: storage.FileType, Type: storage.FileType,
Name: hdr.Name, Name: hdr.Name,
Size: hdr.Size, Size: hdr.Size,
Payload: <-sumChan, Payload: csum,
}) })
if err != nil { if err != nil {
pW.CloseWithError(err) pW.CloseWithError(err)