aboutsummaryrefslogtreecommitdiff
path: root/Emby.Drawing/ImageProcessor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Drawing/ImageProcessor.cs')
-rw-r--r--Emby.Drawing/ImageProcessor.cs51
1 files changed, 17 insertions, 34 deletions
diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs
index 3235b7efa..47c9357fd 100644
--- a/Emby.Drawing/ImageProcessor.cs
+++ b/Emby.Drawing/ImageProcessor.cs
@@ -780,40 +780,38 @@ namespace Emby.Drawing
// All enhanced images are saved as png to allow transparency
var enhancedImagePath = GetCachePath(EnhancedImageCachePath, cacheGuid + ".png");
- var semaphore = GetLock(enhancedImagePath);
-
- await semaphore.WaitAsync().ConfigureAwait(false);
-
// Check again in case of contention
if (_fileSystem.FileExists(enhancedImagePath))
{
- semaphore.Release();
return enhancedImagePath;
}
- var imageProcessingLockTaken = false;
+ _fileSystem.CreateDirectory(Path.GetDirectoryName(enhancedImagePath));
- try
- {
- _fileSystem.CreateDirectory(Path.GetDirectoryName(enhancedImagePath));
+ var tmpPath = Path.Combine(_appPaths.TempDirectory, Path.ChangeExtension(Guid.NewGuid().ToString(), Path.GetExtension(enhancedImagePath)));
+ _fileSystem.CreateDirectory(Path.GetDirectoryName(tmpPath));
- await _imageProcessingSemaphore.WaitAsync().ConfigureAwait(false);
+ await _imageProcessingSemaphore.WaitAsync().ConfigureAwait(false);
- imageProcessingLockTaken = true;
+ try
+ {
+ await ExecuteImageEnhancers(supportedEnhancers, originalImagePath, tmpPath, item, imageType, imageIndex).ConfigureAwait(false);
- await ExecuteImageEnhancers(supportedEnhancers, originalImagePath, enhancedImagePath, item, imageType, imageIndex).ConfigureAwait(false);
+ try
+ {
+ File.Copy(tmpPath, enhancedImagePath, true);
+ }
+ catch
+ {
+
+ }
}
finally
{
- if (imageProcessingLockTaken)
- {
- _imageProcessingSemaphore.Release();
- }
-
- semaphore.Release();
+ _imageProcessingSemaphore.Release();
}
- return enhancedImagePath;
+ return tmpPath;
}
/// <summary>
@@ -839,21 +837,6 @@ namespace Emby.Drawing
}
/// <summary>
- /// The _semaphoreLocks
- /// </summary>
- private readonly ConcurrentDictionary<string, SemaphoreSlim> _semaphoreLocks = new ConcurrentDictionary<string, SemaphoreSlim>();
-
- /// <summary>
- /// Gets the lock.
- /// </summary>
- /// <param name="filename">The filename.</param>
- /// <returns>System.Object.</returns>
- private SemaphoreSlim GetLock(string filename)
- {
- return _semaphoreLocks.GetOrAdd(filename, key => new SemaphoreSlim(1, 1));
- }
-
- /// <summary>
/// Gets the cache path.
/// </summary>
/// <param name="path">The path.</param>