Browse Source

fixed directory watcher crash

Luke Pulverenti 12 years ago
parent
commit
f22c379a13

+ 24 - 40
MediaBrowser.Server.Implementations/IO/DirectoryWatchers.cs

@@ -36,12 +36,12 @@ namespace MediaBrowser.Server.Implementations.IO
         /// <summary>
         /// A dynamic list of paths that should be ignored.  Added to during our own file sytem modifications.
         /// </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>
         /// Any file name ending in any of these will be ignored by the watchers
         /// </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>
         /// The timer lock
@@ -97,7 +97,7 @@ namespace MediaBrowser.Server.Implementations.IO
             Logger = logManager.GetLogger("DirectoryWatchers");
             ConfigurationManager = configurationManager;
         }
-        
+
         /// <summary>
         /// Starts this instance.
         /// </summary>
@@ -117,7 +117,7 @@ namespace MediaBrowser.Server.Implementations.IO
                         }
                         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)
         {
             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
-                Logger.Warn("Network connection lost - will retry...");
-                var retries = 0;
-                var success = false;
-                while (!success && retries < 10)
-                {
-                    await Task.Delay(500).ConfigureAwait(false);
+                await Task.Delay(500).ConfigureAwait(false);
 
-                    try
-                    {
-                        dw.EnableRaisingEvents = false;
-                        dw.EnableRaisingEvents = true;
-                        success = true;
-                    }
-                    catch (IOException)
-                    {
-                        Logger.Warn("Network still unavailable...");
-                        retries++;
-                    }
+                try
+                {
+                    dw.EnableRaisingEvents = false;
+                    dw.EnableRaisingEvents = true;
+                    success = true;
                 }
-                if (!success)
+                catch (IOException)
                 {
-                    Logger.Warn("Unable to access network. Giving up.");
-                    DisposeWatcher(dw);
+                    Logger.Warn("Network still unavailable...");
+                    retries++;
                 }
-
             }
-            else
+            if (!success)
             {
-                if (!ex.Message.Contains("BIOS command limit"))
-                {
-                    Logger.Info("Attempting to re-start watcher.");
-
-                    dw.EnableRaisingEvents = false;
-                    dw.EnableRaisingEvents = true;
-                }
-                
+                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 () =>
             {
                 Logger.Info(i.Name + " (" + i.Path + ") will be refreshed.");
-                
+
                 try
                 {
                     await i.ChangedExternally().ConfigureAwait(false);
@@ -531,7 +515,7 @@ namespace MediaBrowser.Server.Implementations.IO
                     _updateTimer.Dispose();
                     _updateTimer = null;
                 }
-            } 
+            }
 
             _affectedPaths.Clear();
         }

+ 1 - 1
MediaBrowser.Server.Implementations/Library/LuceneSearchEngine.cs

@@ -110,7 +110,7 @@ namespace MediaBrowser.Server.Implementations.Library
 
             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);
 

+ 3 - 0
MediaBrowser.sln

@@ -173,4 +173,7 @@ Global
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(Performance) = preSolution
+		HasPerformanceSessions = true
+	EndGlobalSection
 EndGlobal

+ 2 - 2
Nuget/MediaBrowser.Common.Internal.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Common.Internal</id>
-        <version>3.0.85</version>
+        <version>3.0.86</version>
         <title>MediaBrowser.Common.Internal</title>
         <authors>Luke</authors>
         <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>
         <copyright>Copyright © Media Browser 2013</copyright>
         <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="ServiceStack.Text" version="3.9.38" />
             <dependency id="SimpleInjector" version="2.2.1" />

+ 1 - 1
Nuget/MediaBrowser.Common.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Common</id>
-        <version>3.0.85</version>
+        <version>3.0.86</version>
         <title>MediaBrowser.Common</title>
         <authors>Media Browser Team</authors>
         <owners>ebr,Luke,scottisafool</owners>

+ 2 - 2
Nuget/MediaBrowser.Server.Core.nuspec

@@ -2,7 +2,7 @@
 <package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
     <metadata>
         <id>MediaBrowser.Server.Core</id>
-        <version>3.0.85</version>
+        <version>3.0.86</version>
         <title>Media Browser.Server.Core</title>
         <authors>Media Browser Team</authors>
         <owners>ebr,Luke,scottisafool</owners>
@@ -12,7 +12,7 @@
         <description>Contains core components required to build plugins for Media Browser Server.</description>
         <copyright>Copyright © Media Browser 2013</copyright>
         <dependencies>
-            <dependency id="MediaBrowser.Common" version="3.0.85" />
+            <dependency id="MediaBrowser.Common" version="3.0.86" />
         </dependencies>
     </metadata>
     <files>