|
|
|
@ -560,8 +560,6 @@ namespace MediaBrowser.Providers.Manager
|
|
|
|
|
new MetadataOptions();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private readonly ConcurrentDictionary<string, SemaphoreSlim> _fileLocks = new ConcurrentDictionary<string, SemaphoreSlim>();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Saves the metadata.
|
|
|
|
|
/// </summary>
|
|
|
|
@ -585,6 +583,7 @@ namespace MediaBrowser.Providers.Manager
|
|
|
|
|
return SaveMetadata(item, updateType, _savers.Where(i => savers.Contains(i.Name, StringComparer.OrdinalIgnoreCase)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private readonly SemaphoreSlim _saveLock = new SemaphoreSlim(1,1);
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Saves the metadata.
|
|
|
|
|
/// </summary>
|
|
|
|
@ -614,9 +613,7 @@ namespace MediaBrowser.Providers.Manager
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var semaphore = _fileLocks.GetOrAdd(path, key => new SemaphoreSlim(1, 1));
|
|
|
|
|
|
|
|
|
|
await semaphore.WaitAsync().ConfigureAwait(false);
|
|
|
|
|
await _saveLock.WaitAsync().ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
@ -629,8 +626,8 @@ namespace MediaBrowser.Providers.Manager
|
|
|
|
|
}
|
|
|
|
|
finally
|
|
|
|
|
{
|
|
|
|
|
_saveLock.Release();
|
|
|
|
|
_libraryMonitor.ReportFileSystemChangeComplete(path, false);
|
|
|
|
|
semaphore.Release();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|