diff --git a/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs b/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs index 0c8fa82447..4981b09273 100644 --- a/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs +++ b/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using System.Threading; +using MediaBrowser.Common.Configuration; using MediaBrowser.Controller.Channels; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; @@ -13,6 +14,8 @@ namespace MediaBrowser.Controller.BaseItemManager { private readonly IServerConfigurationManager _serverConfigurationManager; + private int _metadataRefreshConcurrency = 0; + /// /// Initializes a new instance of the class. /// @@ -21,16 +24,18 @@ namespace MediaBrowser.Controller.BaseItemManager { _serverConfigurationManager = serverConfigurationManager; - MetadataRefreshThrottler = new Lazy(() => { - var concurrency = _serverConfigurationManager.Configuration.LibraryMetadataRefreshConcurrency; + _metadataRefreshConcurrency = GetMetadataRefreshConcurrency(); + SetupMetadataThrottler(); - if (concurrency <= 0) + _serverConfigurationManager.ConfigurationUpdated += (object sender, EventArgs e) => + { + int newMetadataRefreshConcurrency = GetMetadataRefreshConcurrency(); + if (_metadataRefreshConcurrency != newMetadataRefreshConcurrency) { - concurrency = Environment.ProcessorCount; + _metadataRefreshConcurrency = newMetadataRefreshConcurrency; + SetupMetadataThrottler(); } - - return new SemaphoreSlim(concurrency); - }); + }; } /// @@ -97,5 +102,28 @@ namespace MediaBrowser.Controller.BaseItemManager return itemConfig == null || !itemConfig.DisabledImageFetchers.Contains(name, StringComparer.OrdinalIgnoreCase); } + + /// + /// Creates the metadata refresh throttler. + /// + private void SetupMetadataThrottler() + { + MetadataRefreshThrottler = new Lazy(() => new SemaphoreSlim(_metadataRefreshConcurrency)); + } + + /// + /// Returns the metadata refresh concurrency. + /// + private int GetMetadataRefreshConcurrency() + { + var concurrency = _serverConfigurationManager.Configuration.LibraryMetadataRefreshConcurrency; + + if (concurrency <= 0) + { + concurrency = Environment.ProcessorCount; + } + + return concurrency; + } } }