fix(imagorvideo): fix reader and read seeker close sequence (#12)

* refactor(imagorvideo): refactor reader/read seeker flow

* fix(imagorvideo): fix reader/read seeker close sequence
This commit is contained in:
Adrian Shum 2022-10-01 21:33:36 +08:00 committed by GitHub
parent 131948c727
commit 01acb20186
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -86,24 +86,15 @@ func (p *Processor) Process(ctx context.Context, in *imagor.Blob, params imagorp
if reader, size, err = in.NewReader(); err != nil { if reader, size, err = in.NewReader(); err != nil {
return return
} }
if size <= 0 {
// force read full file if size unknown
_ = reader.Close()
reader = nil
}
default: default:
}
if reader == nil {
reader, size, err = in.NewReadSeeker() reader, size, err = in.NewReadSeeker()
if err == nil && size <= 0 {
_ = reader.Close()
reader = nil
}
} }
if reader == nil { if reader == nil || size <= 0 {
// write to temp file if read seeker not available // write to temp file if read seeker not available or size unknown
if reader, _, err = in.NewReader(); err != nil { if reader == nil {
return if reader, _, err = in.NewReader(); err != nil {
return
}
} }
var file *os.File var file *os.File
if file, err = os.CreateTemp("", "imagor-"); err != nil { if file, err = os.CreateTemp("", "imagor-"); err != nil {
@ -125,6 +116,9 @@ func (p *Processor) Process(ctx context.Context, in *imagor.Blob, params imagorp
return return
} }
} }
defer func() {
_ = reader.Close()
}()
av, err := ffmpeg.LoadAVContext(ctx, reader, size) av, err := ffmpeg.LoadAVContext(ctx, reader, size)
if err != nil { if err != nil {
return return