diff options
| author | Luke <luke.pulverenti@gmail.com> | 2017-01-18 11:34:47 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-18 11:34:47 -0500 |
| commit | 5b32d2cd644093e78c6ac70a4ff89bcd9d34e8b9 (patch) | |
| tree | dcd94cb323c2bda139c666079d688ffa07bd84e7 /Emby.Server.Implementations/Sync/TargetDataProvider.cs | |
| parent | 06a5d7ccb32a12b0fcbf1f44a1045eb55e47ba42 (diff) | |
| parent | da5f64e42447e3829a6b97c7e739feaa3dc004a8 (diff) | |
Merge pull request #2403 from MediaBrowser/dev
Dev
Diffstat (limited to 'Emby.Server.Implementations/Sync/TargetDataProvider.cs')
| -rw-r--r-- | Emby.Server.Implementations/Sync/TargetDataProvider.cs | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/Emby.Server.Implementations/Sync/TargetDataProvider.cs b/Emby.Server.Implementations/Sync/TargetDataProvider.cs index fbd82aa7a..cac8f0cd8 100644 --- a/Emby.Server.Implementations/Sync/TargetDataProvider.cs +++ b/Emby.Server.Implementations/Sync/TargetDataProvider.cs @@ -19,6 +19,7 @@ namespace Emby.Server.Implementations.Sync private readonly IServerSyncProvider _provider; private readonly SemaphoreSlim _dataLock = new SemaphoreSlim(1, 1); + private readonly SemaphoreSlim _remoteDataLock = new SemaphoreSlim(1, 1); private List<LocalItem> _items; private readonly ILogger _logger; @@ -63,15 +64,24 @@ namespace Emby.Server.Implementations.Sync { _logger.Debug("Getting {0} from {1}", string.Join(MediaSync.PathSeparatorString, GetRemotePath().ToArray()), _provider.Name); - var fileResult = await _provider.GetFiles(GetRemotePath().ToArray(), _target, cancellationToken).ConfigureAwait(false); + await _remoteDataLock.WaitAsync(cancellationToken).ConfigureAwait(false); - if (fileResult.Items.Length > 0) + try { - using (var stream = await _provider.GetFile(fileResult.Items[0].FullName, _target, new Progress<double>(), cancellationToken)) + var fileResult = await _provider.GetFiles(GetRemotePath().ToArray(), _target, cancellationToken).ConfigureAwait(false); + + if (fileResult.Items.Length > 0) { - return _json.DeserializeFromStream<List<LocalItem>>(stream); + using (var stream = await _provider.GetFile(fileResult.Items[0].FullName, _target, new Progress<double>(), cancellationToken)) + { + return _json.DeserializeFromStream<List<LocalItem>>(stream); + } } } + finally + { + _remoteDataLock.Release(); + } return new List<LocalItem>(); } @@ -93,9 +103,19 @@ namespace Emby.Server.Implementations.Sync // Save to sync provider stream.Position = 0; var remotePath = GetRemotePath(); - _logger.Debug("Saving data.json to {0}. Remote path: {1}", _provider.Name, string.Join("/", remotePath)); - await _provider.SendFile(stream, remotePath, _target, new Progress<double>(), cancellationToken).ConfigureAwait(false); + await _remoteDataLock.WaitAsync(cancellationToken).ConfigureAwait(false); + + try + { + _logger.Debug("Saving data.json to {0}. Remote path: {1}", _provider.Name, string.Join("/", remotePath)); + + await _provider.SendFile(stream, remotePath, _target, new Progress<double>(), cancellationToken).ConfigureAwait(false); + } + finally + { + _remoteDataLock.Release(); + } } } |
