erasure: waitCloser should implement CloseWithError. (#1543)

This is needed so that the other end of the pipe receives
and error, cleanups temporary files.
master
Harshavardhana 9 years ago
parent a8fdd04e62
commit 90ea494338
  1. 4
      object-utils.go
  2. 10
      xl-erasure-v1-waitcloser.go

@ -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
}

@ -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() {

Loading…
Cancel
Save