From beafdb27f9e15e30120e872c017aa6eb267e6d7f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 8 May 2013 14:05:14 -0400 Subject: fixes #226 - We're holding locks on images --- MediaBrowser.Controller/Drawing/ImageHeader.cs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'MediaBrowser.Controller/Drawing/ImageHeader.cs') diff --git a/MediaBrowser.Controller/Drawing/ImageHeader.cs b/MediaBrowser.Controller/Drawing/ImageHeader.cs index 91b4b93e9..bca897a4c 100644 --- a/MediaBrowser.Controller/Drawing/ImageHeader.cs +++ b/MediaBrowser.Controller/Drawing/ImageHeader.cs @@ -1,4 +1,6 @@ -using MediaBrowser.Model.Logging; +using System.Threading.Tasks; +using MediaBrowser.Common.IO; +using MediaBrowser.Model.Logging; using System; using System.Collections.Generic; using System.Drawing; @@ -39,7 +41,7 @@ namespace MediaBrowser.Controller.Drawing /// The logger. /// The dimensions of the specified image. /// The image was of an unrecognised format. - public static Size GetDimensions(string path, ILogger logger) + public static async Task GetDimensions(string path, ILogger logger) { try { @@ -54,11 +56,17 @@ namespace MediaBrowser.Controller.Drawing catch { logger.Info("Failed to read image header for {0}. Doing it the slow way.", path); + } - using (var fs = File.OpenRead(path)) + // Buffer to memory stream to avoid image locking file + using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, StreamDefaults.DefaultFileStreamBufferSize, true)) + { + using (var memoryStream = new MemoryStream()) { + await fs.CopyToAsync(memoryStream).ConfigureAwait(false); + // Co it the old fashioned way - using (var b = Image.FromStream(fs, true, false)) + using (var b = Image.FromStream(memoryStream, true, false)) { return b.Size; } -- cgit v1.2.3