summaryrefslogtreecommitdiff
path: root/internal/processing/media/getfile.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-03-21 13:41:44 +0100
committerLibravatar GitHub <noreply@github.com>2022-03-21 13:41:44 +0100
commit73e9cca7019c15a92cb4cd320034652590513198 (patch)
tree188f4e26b49536d40c455587b171053abf05e4d3 /internal/processing/media/getfile.go
parent[feature] Admin account actions (#432) (diff)
downloadgotosocial-73e9cca7019c15a92cb4cd320034652590513198.tar.xz
[bugfix] Close ReadClosers properly in the media package (#434)
* defer lock reader * close readers when finished with them * close the reader in the teereader when finished
Diffstat (limited to 'internal/processing/media/getfile.go')
-rw-r--r--internal/processing/media/getfile.go12
1 files changed, 9 insertions, 3 deletions
diff --git a/internal/processing/media/getfile.go b/internal/processing/media/getfile.go
index 1faa8702f..c74951e38 100644
--- a/internal/processing/media/getfile.go
+++ b/internal/processing/media/getfile.go
@@ -180,9 +180,15 @@ func (p *processor) getAttachmentContent(ctx context.Context, requestingAccount
return nil, 0, err
}
- // everything read from the readCloser by the media manager will be written into the bufferedWriter
- teeReader := io.TeeReader(readCloser, bufferedWriter)
- return teeReader, fileSize, nil
+ // Make a TeeReader so that everything read from the readCloser by the media manager will be written into the bufferedWriter.
+ // We wrap this in a teeReadCloser which implements io.ReadCloser, so that whoever uses the teeReader can close the readCloser
+ // when they're done with it.
+ trc := teeReadCloser{
+ teeReader: io.TeeReader(readCloser, bufferedWriter),
+ close: readCloser.Close,
+ }
+
+ return trc, fileSize, nil
}
// close the pipewriter after data has been piped into it, so the reader on the other side doesn't block;