fixed directory watcher crash
This commit is contained in:
parent
c2c081c8e4
commit
f22c379a13
|
@ -36,12 +36,12 @@ namespace MediaBrowser.Server.Implementations.IO
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A dynamic list of paths that should be ignored. Added to during our own file sytem modifications.
|
/// A dynamic list of paths that should be ignored. Added to during our own file sytem modifications.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly ConcurrentDictionary<string,string> _tempIgnoredPaths = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
private readonly ConcurrentDictionary<string, string> _tempIgnoredPaths = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Any file name ending in any of these will be ignored by the watchers
|
/// Any file name ending in any of these will be ignored by the watchers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly List<string> _alwaysIgnoreFiles = new List<string> {"thumbs.db","small.jpg","albumart.jpg"};
|
private readonly List<string> _alwaysIgnoreFiles = new List<string> { "thumbs.db", "small.jpg", "albumart.jpg" };
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The timer lock
|
/// The timer lock
|
||||||
|
@ -97,7 +97,7 @@ namespace MediaBrowser.Server.Implementations.IO
|
||||||
Logger = logManager.GetLogger("DirectoryWatchers");
|
Logger = logManager.GetLogger("DirectoryWatchers");
|
||||||
ConfigurationManager = configurationManager;
|
ConfigurationManager = configurationManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Starts this instance.
|
/// Starts this instance.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -117,7 +117,7 @@ namespace MediaBrowser.Server.Implementations.IO
|
||||||
}
|
}
|
||||||
catch (IOException)
|
catch (IOException)
|
||||||
{
|
{
|
||||||
return new string[] {};
|
return new string[] { };
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@ -265,49 +265,33 @@ namespace MediaBrowser.Server.Implementations.IO
|
||||||
async void watcher_Error(object sender, ErrorEventArgs e)
|
async void watcher_Error(object sender, ErrorEventArgs e)
|
||||||
{
|
{
|
||||||
var ex = e.GetException();
|
var ex = e.GetException();
|
||||||
var dw = (FileSystemWatcher) sender;
|
var dw = (FileSystemWatcher)sender;
|
||||||
|
|
||||||
Logger.ErrorException("Error in Directory watcher for: "+dw.Path, ex);
|
Logger.ErrorException("Error in Directory watcher for: " + dw.Path, ex);
|
||||||
|
|
||||||
if (ex.Message.Contains("network name is no longer available"))
|
//Network either dropped or, we are coming out of sleep and it hasn't reconnected yet - wait and retry
|
||||||
|
var retries = 0;
|
||||||
|
var success = false;
|
||||||
|
while (!success && retries < 10)
|
||||||
{
|
{
|
||||||
//Network either dropped or, we are coming out of sleep and it hasn't reconnected yet - wait and retry
|
await Task.Delay(500).ConfigureAwait(false);
|
||||||
Logger.Warn("Network connection lost - will retry...");
|
|
||||||
var retries = 0;
|
|
||||||
var success = false;
|
|
||||||
while (!success && retries < 10)
|
|
||||||
{
|
|
||||||
await Task.Delay(500).ConfigureAwait(false);
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
|
||||||
dw.EnableRaisingEvents = false;
|
|
||||||
dw.EnableRaisingEvents = true;
|
|
||||||
success = true;
|
|
||||||
}
|
|
||||||
catch (IOException)
|
|
||||||
{
|
|
||||||
Logger.Warn("Network still unavailable...");
|
|
||||||
retries++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!success)
|
|
||||||
{
|
{
|
||||||
Logger.Warn("Unable to access network. Giving up.");
|
|
||||||
DisposeWatcher(dw);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!ex.Message.Contains("BIOS command limit"))
|
|
||||||
{
|
|
||||||
Logger.Info("Attempting to re-start watcher.");
|
|
||||||
|
|
||||||
dw.EnableRaisingEvents = false;
|
dw.EnableRaisingEvents = false;
|
||||||
dw.EnableRaisingEvents = true;
|
dw.EnableRaisingEvents = true;
|
||||||
|
success = true;
|
||||||
}
|
}
|
||||||
|
catch (IOException)
|
||||||
|
{
|
||||||
|
Logger.Warn("Network still unavailable...");
|
||||||
|
retries++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
Logger.Warn("Unable to access network. Giving up.");
|
||||||
|
DisposeWatcher(dw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,7 +439,7 @@ namespace MediaBrowser.Server.Implementations.IO
|
||||||
await Task.WhenAll(itemsToRefresh.Select(i => Task.Run(async () =>
|
await Task.WhenAll(itemsToRefresh.Select(i => Task.Run(async () =>
|
||||||
{
|
{
|
||||||
Logger.Info(i.Name + " (" + i.Path + ") will be refreshed.");
|
Logger.Info(i.Name + " (" + i.Path + ") will be refreshed.");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await i.ChangedExternally().ConfigureAwait(false);
|
await i.ChangedExternally().ConfigureAwait(false);
|
||||||
|
@ -531,7 +515,7 @@ namespace MediaBrowser.Server.Implementations.IO
|
||||||
_updateTimer.Dispose();
|
_updateTimer.Dispose();
|
||||||
_updateTimer = null;
|
_updateTimer = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_affectedPaths.Clear();
|
_affectedPaths.Clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,7 +110,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||||
|
|
||||||
var items = inputItems.Where(i => !(i is MusicArtist)).ToList();
|
var items = inputItems.Where(i => !(i is MusicArtist)).ToList();
|
||||||
|
|
||||||
hints.AddRange(items.AsParallel().Select(item =>
|
hints.AddRange(items.Select(item =>
|
||||||
{
|
{
|
||||||
var index = GetIndex(item.Name, searchTerm, terms);
|
var index = GetIndex(item.Name, searchTerm, terms);
|
||||||
|
|
||||||
|
|
|
@ -173,4 +173,7 @@ Global
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
GlobalSection(Performance) = preSolution
|
||||||
|
HasPerformanceSessions = true
|
||||||
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common.Internal</id>
|
<id>MediaBrowser.Common.Internal</id>
|
||||||
<version>3.0.85</version>
|
<version>3.0.86</version>
|
||||||
<title>MediaBrowser.Common.Internal</title>
|
<title>MediaBrowser.Common.Internal</title>
|
||||||
<authors>Luke</authors>
|
<authors>Luke</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption.</description>
|
<description>Contains common components shared by Media Browser Theatre and Media Browser Server. Not intended for plugin developer consumption.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.85" />
|
<dependency id="MediaBrowser.Common" version="3.0.86" />
|
||||||
<dependency id="NLog" version="2.0.1.2" />
|
<dependency id="NLog" version="2.0.1.2" />
|
||||||
<dependency id="ServiceStack.Text" version="3.9.38" />
|
<dependency id="ServiceStack.Text" version="3.9.38" />
|
||||||
<dependency id="SimpleInjector" version="2.2.1" />
|
<dependency id="SimpleInjector" version="2.2.1" />
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Common</id>
|
<id>MediaBrowser.Common</id>
|
||||||
<version>3.0.85</version>
|
<version>3.0.86</version>
|
||||||
<title>MediaBrowser.Common</title>
|
<title>MediaBrowser.Common</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
<metadata>
|
<metadata>
|
||||||
<id>MediaBrowser.Server.Core</id>
|
<id>MediaBrowser.Server.Core</id>
|
||||||
<version>3.0.85</version>
|
<version>3.0.86</version>
|
||||||
<title>Media Browser.Server.Core</title>
|
<title>Media Browser.Server.Core</title>
|
||||||
<authors>Media Browser Team</authors>
|
<authors>Media Browser Team</authors>
|
||||||
<owners>ebr,Luke,scottisafool</owners>
|
<owners>ebr,Luke,scottisafool</owners>
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
<description>Contains core components required to build plugins for Media Browser Server.</description>
|
||||||
<copyright>Copyright © Media Browser 2013</copyright>
|
<copyright>Copyright © Media Browser 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.85" />
|
<dependency id="MediaBrowser.Common" version="3.0.86" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user