diff --git a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs
index bc3dc360f7..527a5fb3e6 100644
--- a/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs
+++ b/MediaBrowser.Common.Implementations/Networking/BaseNetworkManager.cs
@@ -6,7 +6,6 @@ using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
-using System.Threading;
using MoreLinq;
namespace MediaBrowser.Common.Implementations.Networking
@@ -14,14 +13,11 @@ namespace MediaBrowser.Common.Implementations.Networking
public abstract class BaseNetworkManager
{
protected ILogger Logger { get; private set; }
- private Timer _clearCacheTimer;
+ private DateTime _lastRefresh;
protected BaseNetworkManager(ILogger logger)
{
Logger = logger;
-
- // Can't use network change events due to a crash in Linux
- _clearCacheTimer = new Timer(ClearCacheTimerCallback, null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1));
}
private void ClearCacheTimerCallback(object state)
@@ -41,15 +37,20 @@ namespace MediaBrowser.Common.Implementations.Networking
/// IPAddress.
public IEnumerable GetLocalIpAddresses()
{
- if (_localIpAddresses == null)
+ var forceRefresh = (DateTime.UtcNow - _lastRefresh).TotalMinutes >= 1;
+
+ if (_localIpAddresses == null || forceRefresh)
{
lock (_localIpAddressSyncLock)
{
- if (_localIpAddresses == null)
+ forceRefresh = (DateTime.UtcNow - _lastRefresh).TotalMinutes >= 1;
+
+ if (_localIpAddresses == null || forceRefresh)
{
var addresses = GetLocalIpAddressesInternal().ToList();
_localIpAddresses = addresses;
+ _lastRefresh = DateTime.UtcNow;
return addresses;
}
diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj
index ccdb319fee..17f211d848 100644
--- a/MediaBrowser.Common/MediaBrowser.Common.csproj
+++ b/MediaBrowser.Common/MediaBrowser.Common.csproj
@@ -90,6 +90,7 @@
+
diff --git a/MediaBrowser.Common/Threading/PeriodicTimer.cs b/MediaBrowser.Common/Threading/PeriodicTimer.cs
new file mode 100644
index 0000000000..cb562a80dc
--- /dev/null
+++ b/MediaBrowser.Common/Threading/PeriodicTimer.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Threading;
+using Microsoft.Win32;
+
+namespace MediaBrowser.Common.Threading
+{
+ public class PeriodicTimer : IDisposable
+ {
+ public Action