From 1ca58cc86190b92f22b36bc3993f1fb3e2337c02 Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Sun, 24 Feb 2019 21:17:33 -0700 Subject: [PATCH] Close things whenever possible Might be a fix for https://github.com/turt2live/matrix-media-repo/issues/92 --- .../download_controller/download_controller.go | 10 ++++++++-- .../preview_controller/preview_controller.go | 5 ++++- .../thumbnail_controller/thumbnail_controller.go | 5 ++++- .../matrix-media-repo/internal_cache/media_cache.go | 2 ++ .../storage/datastore/ds_file/file_store.go | 4 ++++ .../storage/datastore/ds_s3/s3_store.go | 3 +++ 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/github.com/turt2live/matrix-media-repo/controllers/download_controller/download_controller.go b/src/github.com/turt2live/matrix-media-repo/controllers/download_controller/download_controller.go index 7017eb19..92936f80 100644 --- a/src/github.com/turt2live/matrix-media-repo/controllers/download_controller/download_controller.go +++ b/src/github.com/turt2live/matrix-media-repo/controllers/download_controller/download_controller.go @@ -124,7 +124,10 @@ func FindMinimalMediaRecord(origin string, mediaId string, downloadRemote bool, return nil, common.ErrMediaNotFound } - result := <-getResourceHandler().DownloadRemoteMedia(origin, mediaId, false) + mediaChan := getResourceHandler().DownloadRemoteMedia(origin, mediaId, true) + defer close(mediaChan) + + result := <-mediaChan if result.err != nil { return nil, result.err } @@ -186,7 +189,10 @@ func FindMediaRecord(origin string, mediaId string, downloadRemote bool, ctx con return nil, common.ErrMediaNotFound } - result := <-getResourceHandler().DownloadRemoteMedia(origin, mediaId, true) + mediaChan := getResourceHandler().DownloadRemoteMedia(origin, mediaId, true) + defer close(mediaChan) + + result := <-mediaChan if result.err != nil { return nil, result.err } diff --git a/src/github.com/turt2live/matrix-media-repo/controllers/preview_controller/preview_controller.go b/src/github.com/turt2live/matrix-media-repo/controllers/preview_controller/preview_controller.go index c1bfa8de..ba565626 100644 --- a/src/github.com/turt2live/matrix-media-repo/controllers/preview_controller/preview_controller.go +++ b/src/github.com/turt2live/matrix-media-repo/controllers/preview_controller/preview_controller.go @@ -83,7 +83,10 @@ func GetPreview(urlStr string, onHost string, forUserId string, atTs int64, ctx return nil, common.ErrHostBlacklisted } - result := <-getResourceHandler().GeneratePreview(urlStr, forUserId, onHost) + previewChan := getResourceHandler().GeneratePreview(urlStr, forUserId, onHost) + defer close(previewChan) + + result := <-previewChan return result.preview, result.err } diff --git a/src/github.com/turt2live/matrix-media-repo/controllers/thumbnail_controller/thumbnail_controller.go b/src/github.com/turt2live/matrix-media-repo/controllers/thumbnail_controller/thumbnail_controller.go index 222d2ff9..0fa41194 100644 --- a/src/github.com/turt2live/matrix-media-repo/controllers/thumbnail_controller/thumbnail_controller.go +++ b/src/github.com/turt2live/matrix-media-repo/controllers/thumbnail_controller/thumbnail_controller.go @@ -179,7 +179,10 @@ func GetOrGenerateThumbnail(media *types.Media, width int, height int, animated log.Info("Generating thumbnail") - result := <-getResourceHandler().GenerateThumbnail(media, width, height, method, animated) + thumbnailChan := getResourceHandler().GenerateThumbnail(media, width, height, method, animated) + defer close(thumbnailChan) + + result := <-thumbnailChan return result.thumbnail, result.err } diff --git a/src/github.com/turt2live/matrix-media-repo/internal_cache/media_cache.go b/src/github.com/turt2live/matrix-media-repo/internal_cache/media_cache.go index 3573fcba..9f66c245 100644 --- a/src/github.com/turt2live/matrix-media-repo/internal_cache/media_cache.go +++ b/src/github.com/turt2live/matrix-media-repo/internal_cache/media_cache.go @@ -105,6 +105,7 @@ func (c *MediaCache) GetMedia(media *types.Media, log *logrus.Entry) (*cachedFil if err != nil { return nil, err } + defer mediaStream.Close() return &cachedFile{media: media, Contents: bytes.NewBuffer(data)}, nil } @@ -127,6 +128,7 @@ func (c *MediaCache) GetThumbnail(thumbnail *types.Thumbnail, log *logrus.Entry) if err != nil { return nil, err } + defer mediaStream.Close() return &cachedFile{thumbnail: thumbnail, Contents: bytes.NewBuffer(data)}, nil } diff --git a/src/github.com/turt2live/matrix-media-repo/storage/datastore/ds_file/file_store.go b/src/github.com/turt2live/matrix-media-repo/storage/datastore/ds_file/file_store.go index cf727bdb..b2a91eb4 100644 --- a/src/github.com/turt2live/matrix-media-repo/storage/datastore/ds_file/file_store.go +++ b/src/github.com/turt2live/matrix-media-repo/storage/datastore/ds_file/file_store.go @@ -14,6 +14,8 @@ import ( ) func PersistFile(basePath string, file io.ReadCloser, ctx context.Context, log *logrus.Entry) (*types.ObjectInfo, error) { + defer file.Close() + exists := true var primaryContainer string var secondaryContainer string @@ -67,6 +69,8 @@ func PersistFile(basePath string, file io.ReadCloser, ctx context.Context, log * } func PersistFileAtLocation(targetFile string, file io.ReadCloser, ctx context.Context, log *logrus.Entry) (int64, string, error) { + defer file.Close() + f, err := os.OpenFile(targetFile, os.O_WRONLY|os.O_CREATE, 0644) if err != nil { return 0, "", err diff --git a/src/github.com/turt2live/matrix-media-repo/storage/datastore/ds_s3/s3_store.go b/src/github.com/turt2live/matrix-media-repo/storage/datastore/ds_s3/s3_store.go index 19130570..314e8496 100644 --- a/src/github.com/turt2live/matrix-media-repo/storage/datastore/ds_s3/s3_store.go +++ b/src/github.com/turt2live/matrix-media-repo/storage/datastore/ds_s3/s3_store.go @@ -69,6 +69,8 @@ func (s *s3Datastore) EnsureBucketExists() error { } func (s *s3Datastore) UploadFile(file io.ReadCloser, ctx context.Context, log *logrus.Entry) (*types.ObjectInfo, error) { + defer file.Close() + objectName, err := util.GenerateRandomString(512) if err != nil { return nil, err @@ -141,6 +143,7 @@ func (s *s3Datastore) ObjectExists(location string) bool { } func (s *s3Datastore) OverwriteObject(location string, stream io.ReadCloser) error { + defer stream.Close() _, err := s.client.PutObject(s.bucket, location, stream, -1, minio.PutObjectOptions{}) return err } -- GitLab