diff options
Diffstat (limited to 'MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs')
| -rw-r--r-- | MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs index e22c94f5a..5f1299e31 100644 --- a/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs +++ b/MediaBrowser.Providers/MediaInfo/AudioImageProvider.cs @@ -82,26 +82,30 @@ namespace MediaBrowser.Providers.MediaInfo if (!File.Exists(path)) { - using (var stream = await _mediaEncoder.ExtractImage(new[] { item.Path }, InputType.File, true, null, null, cancellationToken).ConfigureAwait(false)) - { - var semaphore = GetLock(path); - - Directory.CreateDirectory(Path.GetDirectoryName(path)); + var semaphore = GetLock(path); - // Acquire a lock - await semaphore.WaitAsync(cancellationToken).ConfigureAwait(false); + // Acquire a lock + await semaphore.WaitAsync(cancellationToken).ConfigureAwait(false); - try + try + { + // Check again in case it was saved while waiting for the lock + if (!File.Exists(path)) { - using (var fileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true)) + Directory.CreateDirectory(Path.GetDirectoryName(path)); + + using (var stream = await _mediaEncoder.ExtractImage(new[] { item.Path }, InputType.File, true, null, null, cancellationToken).ConfigureAwait(false)) { - await stream.CopyToAsync(fileStream).ConfigureAwait(false); + using (var fileStream = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true)) + { + await stream.CopyToAsync(fileStream).ConfigureAwait(false); + } } } - finally - { - semaphore.Release(); - } + } + finally + { + semaphore.Release(); } } |
