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;
+ }
}
}