mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-28 22:42:26 -05:00
[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
This commit is contained in:
parent
55ad6dee71
commit
73e9cca701
4 changed files with 52 additions and 18 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue