From 08ac3b4822262a72ab3f01006798a0741855112d Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Wed, 25 Mar 2020 13:33:53 -0600 Subject: [PATCH] Close a bunch of streams more often Might reduce memory usage over time --- controllers/download_controller/download_controller.go | 6 ++++++ controllers/info_controller/info_controller.go | 1 + controllers/preview_controller/preview_resource_handler.go | 1 + .../thumbnail_controller/thumbnail_resource_handler.go | 4 ++++ util/util_exif/exif.go | 1 + 5 files changed, 13 insertions(+) diff --git a/controllers/download_controller/download_controller.go b/controllers/download_controller/download_controller.go index 6eaea874..77b74fd4 100644 --- a/controllers/download_controller/download_controller.go +++ b/controllers/download_controller/download_controller.go @@ -66,6 +66,9 @@ func GetMedia(origin string, mediaId string, downloadRemote bool, blockForMedia if media != nil { if media.Quarantined { ctx.Log.Warn("Quarantined media accessed") + if minMedia.Stream != nil { + minMedia.Stream.Close() // close the other one first + } if ctx.Config.Quarantine.ReplaceDownloads { ctx.Log.Info("Replacing thumbnail with a quarantined one") @@ -104,6 +107,9 @@ func GetMedia(origin string, mediaId string, downloadRemote bool, blockForMedia return nil, err } if cached != nil && cached.Contents != nil { + if minMedia.Stream != nil { + minMedia.Stream.Close() // close the other one first + } minMedia.Stream = util.BufferToStream(cached.Contents) return minMedia, nil } diff --git a/controllers/info_controller/info_controller.go b/controllers/info_controller/info_controller.go index 69c7eb46..21425985 100644 --- a/controllers/info_controller/info_controller.go +++ b/controllers/info_controller/info_controller.go @@ -30,6 +30,7 @@ func GetOrCalculateBlurhash(media *types.Media, rctx rcontext.RequestContext) (s if err != nil { return "", err } + defer minMedia.Stream.Close() // No cached blurhash: calculate one rctx.Log.Info("Decoding image for blurhash calculation") diff --git a/controllers/preview_controller/preview_resource_handler.go b/controllers/preview_controller/preview_resource_handler.go index db54f9da..9329e79e 100644 --- a/controllers/preview_controller/preview_resource_handler.go +++ b/controllers/preview_controller/preview_resource_handler.go @@ -107,6 +107,7 @@ func urlPreviewWorkFn(request *resource_handler.WorkRequest) interface{} { if err != nil { ctx.Log.Warn("Non-fatal error streaming datastore file: " + err.Error()) } else { + defer mediaStream.Close() img, err := imaging.Decode(mediaStream) if err != nil { ctx.Log.Warn("Non-fatal error getting thumbnail dimensions: " + err.Error()) diff --git a/controllers/thumbnail_controller/thumbnail_resource_handler.go b/controllers/thumbnail_controller/thumbnail_resource_handler.go index aa8859e3..f2a4544a 100644 --- a/controllers/thumbnail_controller/thumbnail_resource_handler.go +++ b/controllers/thumbnail_controller/thumbnail_resource_handler.go @@ -150,6 +150,7 @@ func GenerateThumbnail(media *types.Media, width int, height int, method string, ctx.Log.Error("Error getting file: ", err2) return nil, err2 } + defer mediaStream.Close() src, err = imaging.Decode(mediaStream) } @@ -225,6 +226,7 @@ func GenerateThumbnail(media *types.Media, width int, height int, method string, ctx.Log.Error("Error resolving datastore path: ", err) return nil, err } + defer mediaStream.Close() g, err := gif.DecodeAll(mediaStream) if err != nil { @@ -348,6 +350,7 @@ func svgToImage(media *types.Media, ctx rcontext.RequestContext) (image.Image, e ctx.Log.Error("Error streaming file: ", err) return nil, err } + defer mediaStream.Close() f, err := os.OpenFile(tempFile1, os.O_RDWR|os.O_CREATE, 0640) if err != nil { @@ -376,6 +379,7 @@ func pickImageFrame(media *types.Media, ctx rcontext.RequestContext) (image.Imag ctx.Log.Error("Error resolving datastore path: ", err) return nil, err } + defer mediaStream.Close() g, err := gif.DecodeAll(mediaStream) if err != nil { diff --git a/util/util_exif/exif.go b/util/util_exif/exif.go index 7403bb59..f419927b 100644 --- a/util/util_exif/exif.go +++ b/util/util_exif/exif.go @@ -25,6 +25,7 @@ func GetExifOrientation(media *types.Media) (*ExifOrientation, error) { if err != nil { return nil, err } + defer mediaStream.Close() exifData, err := exif.Decode(mediaStream) if err != nil { -- GitLab