From a8ba36a0e126ea5909d367985fc34cb65266610d Mon Sep 17 00:00:00 2001 From: Rob Watson Date: Sat, 5 Feb 2022 07:45:03 +0100 Subject: [PATCH] GetAudio: avoid leaking goroutine on cancellation --- backend/media/get_audio.go | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/backend/media/get_audio.go b/backend/media/get_audio.go index 9f13479..ff3543c 100644 --- a/backend/media/get_audio.go +++ b/backend/media/get_audio.go @@ -173,25 +173,14 @@ func (s *audioGetterState) getAudio(ctx context.Context, r io.ReadCloser, mediaS }) g.Go(func() error { + defer func() { _ = r.Close() }() + defer func() { _ = uploadWriter.Close() }() + defer func() { _ = ffmpegWriter.Close() }() + if _, err := io.Copy(mw, streamWithProgress); err != nil { return fmt.Errorf("error copying: %v", err) } - // ignoring the following Close errors should be ok, as the Copy has - // already completed successfully. - - if err := ffmpegWriter.Close(); err != nil { - s.logger.With("err", err).Warn("getAudio: unable to close ffmpegWriter") - } - - if err := uploadWriter.Close(); err != nil { - s.logger.With("err", err).Warn("getAudio: unable to close pipeWriter") - } - - if err := r.Close(); err != nil { - s.logger.With("err", err).Warn("getAudio: unable to close stream") - } - return nil })