protect wg.Done from being called twice (#17075)

This commit is contained in:
jiuker 2023-04-27 22:55:36 +08:00 committed by GitHub
parent e7cac8acef
commit c8b92f6067
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 4 additions and 1 deletions

View File

@ -25,13 +25,16 @@ import (
// PipeWriter is similar to io.PipeWriter with wait group // PipeWriter is similar to io.PipeWriter with wait group
type PipeWriter struct { type PipeWriter struct {
*io.PipeWriter *io.PipeWriter
once sync.Once
done func() done func()
} }
// CloseWithError close with supplied error the writer end. // CloseWithError close with supplied error the writer end.
func (w *PipeWriter) CloseWithError(err error) error { func (w *PipeWriter) CloseWithError(err error) error {
err = w.PipeWriter.CloseWithError(err) err = w.PipeWriter.CloseWithError(err)
w.done() w.once.Do(func() {
w.done()
})
return err return err
} }