erasure: waitCloser should implement CloseWithError. (#1543)

This is needed so that the other end of the pipe receives
and error, cleanups temporary files.
This commit is contained in:
Harshavardhana 2016-05-08 16:26:10 -07:00
parent a8fdd04e62
commit 90ea494338
2 changed files with 12 additions and 2 deletions

View File

@ -144,9 +144,9 @@ func safeCloseAndRemove(writer io.WriteCloser) error {
if ok {
return safeWriter.CloseAndRemove()
}
pipeWriter, ok := writer.(*io.PipeWriter)
wCloser, ok := writer.(*waitCloser)
if ok {
return pipeWriter.CloseWithError(errors.New("Close and error out."))
return wCloser.CloseWithError(errors.New("Close and error out."))
}
return nil
}

View File

@ -43,6 +43,16 @@ func (b *waitCloser) Close() error {
return err
}
// CloseWithError closes the writer; subsequent read to the read
// half of the pipe will return the error err.
func (b *waitCloser) CloseWithError(err error) error {
w, ok := b.writer.(*io.PipeWriter)
if ok {
return w.CloseWithError(err)
}
return err
}
// release the Close, causing it to unblock. Only call this
// once. Calling it multiple times results in a panic.
func (b *waitCloser) release() {