fix: a possible closer leak in SelectObjectHandler (#16598)

This commit is contained in:
jiuker authored and GitHub committed 2023-02-17 01:44:40 -08:00
1 parent 3a6cd4f73d
commit e470268c7c
2 files changed
+12 -8

No files matched your search

+10 -6
View File
@@ -698,6 +698,11 @@ type ObjectReadSeekCloser struct {
size int64 // actual object size regardless of compression/encryption
offset int64
reader io.ReadCloser
// reader can be closed idempotently multiple times
closerOnce sync.Once
// Error storing reader.Close()
closerErr error
}
// NewObjectReadSeekCloser creates a new ObjectReadSeekCloser.
@@ -749,12 +754,11 @@ func (rsc *ObjectReadSeekCloser) Read(p []byte) (n int, err error) {
// object for reading and a subsequent Close call is required to ensure
// resources are freed.
func (rsc *ObjectReadSeekCloser) Close() error {
if rsc.reader != nil {
err := rsc.reader.Close()
if err == nil {
rsc.closerOnce.Do(func() {
if rsc.reader != nil {
rsc.closerErr = rsc.reader.Close()
rsc.reader = nil
}
return err
}
return nil
})
return rsc.closerErr
}