Luke Pulverenti 7 年之前
父节点
当前提交
49b799adbe
共有 69 个文件被更改,包括 200 次插入180 次删除
  1. 1 6
      Emby.Dlna/ContentDirectory/ContentDirectory.cs
  2. 1 0
      Emby.Dlna/DlnaManager.cs
  3. 1 0
      Emby.Dlna/Main/DlnaEntryPoint.cs
  4. 1 6
      Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrar.cs
  5. 1 0
      Emby.Dlna/PlayTo/Device.cs
  6. 1 0
      Emby.Dlna/PlayTo/PlayToController.cs
  7. 1 0
      Emby.Dlna/PlayTo/PlayToManager.cs
  8. 4 2
      Emby.Drawing.ImageMagick/ImageMagickEncoder.cs
  9. 20 23
      Emby.Drawing.Skia/SkiaEncoder.cs
  10. 9 1
      Emby.Drawing/ImageProcessor.cs
  11. 0 4
      Emby.Drawing/NullImageEncoder.cs
  12. 1 0
      Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs
  13. 3 1
      Emby.Server.Implementations/ApplicationHost.cs
  14. 1 0
      Emby.Server.Implementations/Channels/ChannelManager.cs
  15. 1 0
      Emby.Server.Implementations/Data/ManagedConnection.cs
  16. 1 0
      Emby.Server.Implementations/Diagnostics/CommonProcess.cs
  17. 1 0
      Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs
  18. 1 0
      Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs
  19. 1 0
      Emby.Server.Implementations/EntryPoints/KeepServerAwake.cs
  20. 1 0
      Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs
  21. 1 0
      Emby.Server.Implementations/EntryPoints/LoadRegistrations.cs
  22. 1 0
      Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs
  23. 3 1
      Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs
  24. 1 0
      Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs
  25. 3 1
      Emby.Server.Implementations/EntryPoints/StartupWizard.cs
  26. 1 0
      Emby.Server.Implementations/EntryPoints/SystemEvents.cs
  27. 1 0
      Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs
  28. 1 0
      Emby.Server.Implementations/EntryPoints/UsageEntryPoint.cs
  29. 1 0
      Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs
  30. 0 21
      Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs
  31. 1 0
      Emby.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs
  32. 1 0
      Emby.Server.Implementations/IO/FileRefresher.cs
  33. 1 0
      Emby.Server.Implementations/IO/IsoManager.cs
  34. 1 0
      Emby.Server.Implementations/IO/LibraryMonitor.cs
  35. 1 0
      Emby.Server.Implementations/Library/MediaSourceManager.cs
  36. 1 0
      Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
  37. 3 1
      Emby.Server.Implementations/LiveTv/EmbyTV/EntryPoint.cs
  38. 1 0
      Emby.Server.Implementations/LiveTv/LiveTvManager.cs
  39. 1 1
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs
  40. 1 0
      Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs
  41. 11 4
      Emby.Server.Implementations/Logging/SimpleLogManager.cs
  42. 1 0
      Emby.Server.Implementations/Net/NetAcceptSocket.cs
  43. 1 0
      Emby.Server.Implementations/News/NewsEntryPoint.cs
  44. 1 0
      Emby.Server.Implementations/Notifications/Notifications.cs
  45. 3 1
      Emby.Server.Implementations/Notifications/WebSocketNotifier.cs
  46. 1 5
      Emby.Server.Implementations/Session/HttpSessionController.cs
  47. 1 0
      Emby.Server.Implementations/Session/SessionWebSocketListener.cs
  48. 1 0
      Emby.Server.Implementations/Session/WebSocketController.cs
  49. 1 0
      Emby.Server.Implementations/TV/SeriesPostScanTask.cs
  50. 1 0
      Emby.Server.Implementations/Threading/CommonTimer.cs
  51. 1 0
      Emby.Server.Implementations/Updates/InstallationManager.cs
  52. 2 6
      MediaBrowser.Api/ApiEntryPoint.cs
  53. 1 0
      MediaBrowser.Api/BasePeriodicWebSocketListener.cs
  54. 1 0
      MediaBrowser.Common/Net/HttpResponseInfo.cs
  55. 1 1
      MediaBrowser.Common/Net/IHttpClient.cs
  56. 1 0
      MediaBrowser.Common/Progress/ActionableProgress.cs
  57. 1 1
      MediaBrowser.Controller/Drawing/IImageEncoder.cs
  58. 1 0
      MediaBrowser.Controller/Drawing/ImageStream.cs
  59. 1 0
      MediaBrowser.Controller/Session/SessionInfo.cs
  60. 1 0
      MediaBrowser.Model/Net/HttpResponse.cs
  61. 1 0
      MediaBrowser.Providers/Manager/ProviderManager.cs
  62. 1 14
      MediaBrowser.Providers/Movies/MovieDbProvider.cs
  63. 12 10
      MediaBrowser.Server.Mac/Main.cs
  64. 19 17
      MediaBrowser.Server.Mono/Program.cs
  65. 54 52
      MediaBrowser.ServerApplication/MainStartup.cs
  66. 1 0
      MediaBrowser.XbmcMetadata/EntryPoint.cs
  67. 1 1
      SharedVersion.cs
  68. 1 0
      SocketHttpListener/Net/HttpListener.cs
  69. 1 0
      SocketHttpListener/WebSocket.cs

+ 1 - 6
Emby.Dlna/ContentDirectory/ContentDirectory.cs

@@ -17,7 +17,7 @@ using MediaBrowser.Model.Xml;
 
 
 namespace Emby.Dlna.ContentDirectory
 namespace Emby.Dlna.ContentDirectory
 {
 {
-    public class ContentDirectory : BaseService, IContentDirectory, IDisposable
+    public class ContentDirectory : BaseService, IContentDirectory
     {
     {
         private readonly ILibraryManager _libraryManager;
         private readonly ILibraryManager _libraryManager;
         private readonly IImageProcessor _imageProcessor;
         private readonly IImageProcessor _imageProcessor;
@@ -143,10 +143,5 @@ namespace Emby.Dlna.ContentDirectory
 
 
             return null;
             return null;
         }
         }
-
-        public void Dispose()
-        {
-
-        }
     }
     }
 }
 }

+ 1 - 0
Emby.Dlna/DlnaManager.cs

@@ -596,6 +596,7 @@ namespace Emby.Dlna
 
 
         public void Dispose()
         public void Dispose()
         {
         {
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Dlna/Main/DlnaEntryPoint.cs

@@ -394,6 +394,7 @@ namespace Emby.Dlna.Main
                 _communicationsServer.Dispose();
                 _communicationsServer.Dispose();
                 _communicationsServer = null;
                 _communicationsServer = null;
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
 
 
         public void DisposeDlnaServer()
         public void DisposeDlnaServer()

+ 1 - 6
Emby.Dlna/MediaReceiverRegistrar/MediaReceiverRegistrar.cs

@@ -9,7 +9,7 @@ using MediaBrowser.Model.Xml;
 
 
 namespace Emby.Dlna.MediaReceiverRegistrar
 namespace Emby.Dlna.MediaReceiverRegistrar
 {
 {
-    public class MediaReceiverRegistrar : BaseService, IMediaReceiverRegistrar, IDisposable
+    public class MediaReceiverRegistrar : BaseService, IMediaReceiverRegistrar
     {
     {
         private readonly IServerConfigurationManager _config;
         private readonly IServerConfigurationManager _config;
         protected readonly IXmlReaderSettingsFactory XmlReaderSettingsFactory;
         protected readonly IXmlReaderSettingsFactory XmlReaderSettingsFactory;
@@ -33,10 +33,5 @@ namespace Emby.Dlna.MediaReceiverRegistrar
                 Logger, XmlReaderSettingsFactory)
                 Logger, XmlReaderSettingsFactory)
                 .ProcessControlRequest(request);
                 .ProcessControlRequest(request);
         }
         }
-
-        public void Dispose()
-        {
-
-        }
     }
     }
 }
 }

+ 1 - 0
Emby.Dlna/PlayTo/Device.cs

@@ -1105,6 +1105,7 @@ namespace Emby.Dlna.PlayTo
                 _disposed = true;
                 _disposed = true;
 
 
                 DisposeTimer();
                 DisposeTimer();
+                GC.SuppressFinalize(this);
             }
             }
         }
         }
 
 

+ 1 - 0
Emby.Dlna/PlayTo/PlayToController.cs

@@ -685,6 +685,7 @@ namespace Emby.Dlna.PlayTo
                 _device.OnDeviceUnavailable = null;
                 _device.OnDeviceUnavailable = null;
 
 
                 _device.Dispose();
                 _device.Dispose();
+                GC.SuppressFinalize(this);
             }
             }
         }
         }
 
 

+ 1 - 0
Emby.Dlna/PlayTo/PlayToManager.cs

@@ -225,6 +225,7 @@ namespace Emby.Dlna.PlayTo
         {
         {
             _disposed = true;
             _disposed = true;
             _deviceDiscovery.DeviceDiscovered -= _deviceDiscovery_DeviceDiscovered;
             _deviceDiscovery.DeviceDiscovered -= _deviceDiscovery_DeviceDiscovered;
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 4 - 2
Emby.Drawing.ImageMagick/ImageMagickEncoder.cs

@@ -12,7 +12,7 @@ using MediaBrowser.Model.System;
 
 
 namespace Emby.Drawing.ImageMagick
 namespace Emby.Drawing.ImageMagick
 {
 {
-    public class ImageMagickEncoder : IImageEncoder
+    public class ImageMagickEncoder : IImageEncoder, IDisposable
     {
     {
         private readonly ILogger _logger;
         private readonly ILogger _logger;
         private readonly IApplicationPaths _appPaths;
         private readonly IApplicationPaths _appPaths;
@@ -38,7 +38,8 @@ namespace Emby.Drawing.ImageMagick
                 // Some common file name extensions for RAW picture files include: .cr2, .crw, .dng, .nef, .orf, .rw2, .pef, .arw, .sr2, .srf, and .tif.
                 // Some common file name extensions for RAW picture files include: .cr2, .crw, .dng, .nef, .orf, .rw2, .pef, .arw, .sr2, .srf, and .tif.
                 return new[]
                 return new[]
                 {
                 {
-                    "tiff", 
+                    "tiff",
+                    "tif",
                     "jpeg", 
                     "jpeg", 
                     "jpg", 
                     "jpg", 
                     "png", 
                     "png", 
@@ -327,6 +328,7 @@ namespace Emby.Drawing.ImageMagick
         {
         {
             _disposed = true;
             _disposed = true;
             Wand.CloseEnvironment();
             Wand.CloseEnvironment();
+            GC.SuppressFinalize(this);
         }
         }
 
 
         private void CheckDisposed()
         private void CheckDisposed()

+ 20 - 23
Emby.Drawing.Skia/SkiaEncoder.cs

@@ -193,30 +193,31 @@ namespace Emby.Drawing.Skia
             {
             {
                 using (var stream = new SKFileStream(path))
                 using (var stream = new SKFileStream(path))
                 {
                 {
-                    var codec = SKCodec.Create(stream);
-
-                    if (codec == null)
+                    using (var codec = SKCodec.Create(stream))
                     {
                     {
-                        origin = SKCodecOrigin.TopLeft;
-                        return null;
-                    }
+                        if (codec == null)
+                        {
+                            origin = SKCodecOrigin.TopLeft;
+                            return null;
+                        }
 
 
-                    // create the bitmap
-                    var bitmap = new SKBitmap(codec.Info.Width, codec.Info.Height, !requiresTransparencyHack);
+                        // create the bitmap
+                        var bitmap = new SKBitmap(codec.Info.Width, codec.Info.Height, !requiresTransparencyHack);
 
 
-                    if (bitmap != null)
-                    {
-                        // decode
-                        codec.GetPixels(bitmap.Info, bitmap.GetPixels());
+                        if (bitmap != null)
+                        {
+                            // decode
+                            codec.GetPixels(bitmap.Info, bitmap.GetPixels());
 
 
-                        origin = codec.Origin;
-                    }
-                    else
-                    {
-                        origin = SKCodecOrigin.TopLeft;
-                    }
+                            origin = codec.Origin;
+                        }
+                        else
+                        {
+                            origin = SKCodecOrigin.TopLeft;
+                        }
 
 
-                    return bitmap;
+                        return bitmap;
+                    }
                 }
                 }
             }
             }
 
 
@@ -593,10 +594,6 @@ namespace Emby.Drawing.Skia
             get { return "Skia"; }
             get { return "Skia"; }
         }
         }
 
 
-        public void Dispose()
-        {
-        }
-
         public bool SupportsImageCollageCreation
         public bool SupportsImageCollageCreation
         {
         {
             get { return true; }
             get { return true; }

+ 9 - 1
Emby.Drawing/ImageProcessor.cs

@@ -126,6 +126,7 @@ namespace Emby.Drawing
                 return new string[]
                 return new string[]
                 {
                 {
                     "tiff",
                     "tiff",
+                    "tif",
                     "jpeg",
                     "jpeg",
                     "jpg",
                     "jpg",
                     "png",
                     "png",
@@ -967,8 +968,15 @@ namespace Emby.Drawing
         public void Dispose()
         public void Dispose()
         {
         {
             _disposed = true;
             _disposed = true;
-            _imageEncoder.Dispose();
+
+            var disposable = _imageEncoder as IDisposable;
+            if (disposable != null)
+            {
+                disposable.Dispose();
+            }
+
             _saveImageSizeTimer.Dispose();
             _saveImageSizeTimer.Dispose();
+            GC.SuppressFinalize(this);
         }
         }
 
 
         private void CheckDisposed()
         private void CheckDisposed()

+ 0 - 4
Emby.Drawing/NullImageEncoder.cs

@@ -61,9 +61,5 @@ namespace Emby.Drawing
         {
         {
             throw new NotImplementedException();
             throw new NotImplementedException();
         }
         }
-
-        public void Dispose()
-        {
-        }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs

@@ -491,6 +491,7 @@ namespace Emby.Server.Implementations.Activity
             //_logManager.LoggerLoaded -= _logManager_LoggerLoaded;
             //_logManager.LoggerLoaded -= _logManager_LoggerLoaded;
 
 
             _appHost.ApplicationUpdated -= _appHost_ApplicationUpdated;
             _appHost.ApplicationUpdated -= _appHost_ApplicationUpdated;
+            GC.SuppressFinalize(this);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 3 - 1
Emby.Server.Implementations/ApplicationHost.cs

@@ -828,7 +828,7 @@ namespace Emby.Server.Implementations
             RegisterSingleInstance(MemoryStreamFactory);
             RegisterSingleInstance(MemoryStreamFactory);
             RegisterSingleInstance(SystemEvents);
             RegisterSingleInstance(SystemEvents);
 
 
-            RegisterSingleInstance(LogManager);
+            RegisterSingleInstance(LogManager, false);
             RegisterSingleInstance(Logger);
             RegisterSingleInstance(Logger);
 
 
             RegisterSingleInstance(EnvironmentInfo);
             RegisterSingleInstance(EnvironmentInfo);
@@ -2341,6 +2341,7 @@ namespace Emby.Server.Implementations
                 _disposed = true;
                 _disposed = true;
 
 
                 Dispose(true);
                 Dispose(true);
+                GC.SuppressFinalize(this);
             }
             }
         }
         }
 
 
@@ -2354,6 +2355,7 @@ namespace Emby.Server.Implementations
             {
             {
                 var type = GetType();
                 var type = GetType();
 
 
+                LogManager.AddConsoleOutput();
                 Logger.Info("Disposing " + type.Name);
                 Logger.Info("Disposing " + type.Name);
 
 
                 var parts = DisposableParts.Distinct().Where(i => i.GetType() != type).ToList();
                 var parts = DisposableParts.Distinct().Where(i => i.GetType() != type).ToList();

+ 1 - 0
Emby.Server.Implementations/Channels/ChannelManager.cs

@@ -1624,6 +1624,7 @@ namespace Emby.Server.Implementations.Channels
 
 
         public void Dispose()
         public void Dispose()
         {
         {
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/Data/ManagedConnection.cs

@@ -77,6 +77,7 @@ namespace Emby.Server.Implementations.Data
             {
             {
                 Close();
                 Close();
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/Diagnostics/CommonProcess.cs

@@ -104,6 +104,7 @@ namespace Emby.Server.Implementations.Diagnostics
         public void Dispose()
         public void Dispose()
         {
         {
             _process.Dispose();
             _process.Dispose();
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/EntryPoints/AutomaticRestartEntryPoint.cs

@@ -112,6 +112,7 @@ namespace Emby.Server.Implementations.EntryPoints
             _appHost.HasPendingRestartChanged -= _appHost_HasPendingRestartChanged;
             _appHost.HasPendingRestartChanged -= _appHost_HasPendingRestartChanged;
 
 
             DisposeTimer();
             DisposeTimer();
+            GC.SuppressFinalize(this);
         }
         }
 
 
         private void DisposeTimer()
         private void DisposeTimer()

+ 1 - 0
Emby.Server.Implementations/EntryPoints/ExternalPortForwarding.cs

@@ -294,6 +294,7 @@ namespace Emby.Server.Implementations.EntryPoints
         {
         {
             _disposed = true;
             _disposed = true;
             DisposeNat();
             DisposeNat();
+            GC.SuppressFinalize(this);
         }
         }
 
 
         private void DisposeNat()
         private void DisposeNat()

+ 1 - 0
Emby.Server.Implementations/EntryPoints/KeepServerAwake.cs

@@ -60,6 +60,7 @@ namespace Emby.Server.Implementations.EntryPoints
                 _timer.Dispose();
                 _timer.Dispose();
                 _timer = null;
                 _timer = null;
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/EntryPoints/LibraryChangedNotifier.cs

@@ -426,6 +426,7 @@ namespace Emby.Server.Implementations.EntryPoints
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 1 - 0
Emby.Server.Implementations/EntryPoints/LoadRegistrations.cs

@@ -68,6 +68,7 @@ namespace Emby.Server.Implementations.EntryPoints
                 _timer.Dispose();
                 _timer.Dispose();
                 _timer = null;
                 _timer = null;
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/EntryPoints/RecordingNotifier.cs

@@ -72,6 +72,7 @@ namespace Emby.Server.Implementations.EntryPoints
             _liveTvManager.SeriesTimerCancelled -= _liveTvManager_SeriesTimerCancelled;
             _liveTvManager.SeriesTimerCancelled -= _liveTvManager_SeriesTimerCancelled;
             _liveTvManager.TimerCreated -= _liveTvManager_TimerCreated;
             _liveTvManager.TimerCreated -= _liveTvManager_TimerCreated;
             _liveTvManager.SeriesTimerCreated -= _liveTvManager_SeriesTimerCreated;
             _liveTvManager.SeriesTimerCreated -= _liveTvManager_SeriesTimerCreated;
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 3 - 1
Emby.Server.Implementations/EntryPoints/RefreshUsersMetadata.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Library;
+using System;
+using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Plugins;
 using MediaBrowser.Controller.Plugins;
 using System.Threading;
 using System.Threading;
 
 
@@ -36,6 +37,7 @@ namespace Emby.Server.Implementations.EntryPoints
         /// </summary>
         /// </summary>
         public void Dispose()
         public void Dispose()
         {
         {
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs

@@ -174,6 +174,7 @@ namespace Emby.Server.Implementations.EntryPoints
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 3 - 1
Emby.Server.Implementations/EntryPoints/StartupWizard.cs

@@ -1,4 +1,5 @@
-using Emby.Server.Implementations.Browser;
+using System;
+using Emby.Server.Implementations.Browser;
 using MediaBrowser.Controller;
 using MediaBrowser.Controller;
 using MediaBrowser.Controller.Plugins;
 using MediaBrowser.Controller.Plugins;
 using MediaBrowser.Model.Logging;
 using MediaBrowser.Model.Logging;
@@ -54,6 +55,7 @@ namespace Emby.Server.Implementations.EntryPoints
         /// </summary>
         /// </summary>
         public void Dispose()
         public void Dispose()
         {
         {
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/EntryPoints/SystemEvents.cs

@@ -43,6 +43,7 @@ namespace Emby.Server.Implementations.EntryPoints
         public void Dispose()
         public void Dispose()
         {
         {
             _systemEvents.SystemShutdown -= _systemEvents_SystemShutdown;
             _systemEvents.SystemShutdown -= _systemEvents_SystemShutdown;
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/EntryPoints/UdpServerEntryPoint.cs

@@ -65,6 +65,7 @@ namespace Emby.Server.Implementations.EntryPoints
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 1 - 0
Emby.Server.Implementations/EntryPoints/UsageEntryPoint.cs

@@ -130,6 +130,7 @@ namespace Emby.Server.Implementations.EntryPoints
         public void Dispose()
         public void Dispose()
         {
         {
             _sessionManager.SessionStarted -= _sessionManager_SessionStarted;
             _sessionManager.SessionStarted -= _sessionManager_SessionStarted;
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/EntryPoints/UserDataChangeNotifier.cs

@@ -160,6 +160,7 @@ namespace Emby.Server.Implementations.EntryPoints
             }
             }
 
 
             _userDataManager.UserDataSaved -= _userDataManager_UserDataSaved;
             _userDataManager.UserDataSaved -= _userDataManager_UserDataSaved;
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 0 - 21
Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs

@@ -822,27 +822,6 @@ namespace Emby.Server.Implementations.HttpClientManager
             return url;
             return url;
         }
         }
 
 
-        /// <summary>
-        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
-        /// </summary>
-        public void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        /// <summary>
-        /// Releases unmanaged and - optionally - managed resources.
-        /// </summary>
-        /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
-        protected virtual void Dispose(bool dispose)
-        {
-            if (dispose)
-            {
-                _httpClients.Clear();
-            }
-        }
-
         /// <summary>
         /// <summary>
         /// Throws the cancellation exception.
         /// Throws the cancellation exception.
         /// </summary>
         /// </summary>

+ 1 - 0
Emby.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs

@@ -123,6 +123,7 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 1 - 0
Emby.Server.Implementations/IO/FileRefresher.cs

@@ -238,6 +238,7 @@ namespace Emby.Server.Implementations.IO
         {
         {
             _disposed = true;
             _disposed = true;
             DisposeTimer();
             DisposeTimer();
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/IO/IsoManager.cs

@@ -70,6 +70,7 @@ namespace Emby.Server.Implementations.IO
             {
             {
                 mounter.Dispose();
                 mounter.Dispose();
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/IO/LibraryMonitor.cs

@@ -649,6 +649,7 @@ namespace Emby.Server.Implementations.IO
 
 
         public void Dispose()
         public void Dispose()
         {
         {
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/Library/MediaSourceManager.cs

@@ -524,6 +524,7 @@ namespace Emby.Server.Implementations.Library
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         private readonly object _disposeLock = new object();
         private readonly object _disposeLock = new object();

+ 1 - 0
Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -2630,6 +2630,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             {
             {
                 pair.Value.CancellationTokenSource.Cancel();
                 pair.Value.CancellationTokenSource.Cancel();
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
 
 
         public List<VirtualFolderInfo> GetRecordingFolders()
         public List<VirtualFolderInfo> GetRecordingFolders()

+ 3 - 1
Emby.Server.Implementations/LiveTv/EmbyTV/EntryPoint.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Plugins;
+using System;
+using MediaBrowser.Controller.Plugins;
 
 
 namespace Emby.Server.Implementations.LiveTv.EmbyTV
 namespace Emby.Server.Implementations.LiveTv.EmbyTV
 {
 {
@@ -11,6 +12,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
 
         public void Dispose()
         public void Dispose()
         {
         {
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -2779,6 +2779,7 @@ namespace Emby.Server.Implementations.LiveTv
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         private bool _isDisposed = false;
         private bool _isDisposed = false;

+ 1 - 1
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs

@@ -422,7 +422,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
                 SupportsTranscoding = true,
                 SupportsTranscoding = true,
                 IsInfiniteStream = true,
                 IsInfiniteStream = true,
                 IgnoreDts = true,
                 IgnoreDts = true,
-                //SupportsProbing = false,
+                SupportsProbing = false,
                 //AnalyzeDurationMs = 2000000
                 //AnalyzeDurationMs = 2000000
                 //IgnoreIndex = true,
                 //IgnoreIndex = true,
                 //ReadAtNativeFramerate = true
                 //ReadAtNativeFramerate = true

+ 1 - 0
Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs

@@ -99,6 +99,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
             var task = StopStreaming();
             var task = StopStreaming();
 
 
             Task.WaitAll(task);
             Task.WaitAll(task);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         public async Task<bool> CheckTunerAvailability(IpAddressInfo remoteIp, int tuner, CancellationToken cancellationToken)
         public async Task<bool> CheckTunerAvailability(IpAddressInfo remoteIp, int tuner, CancellationToken cancellationToken)

+ 11 - 4
Emby.Server.Implementations/Logging/SimpleLogManager.cs

@@ -107,6 +107,7 @@ namespace Emby.Server.Implementations.Logging
             }
             }
 
 
             _fileLogger = null;
             _fileLogger = null;
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 
 
@@ -130,13 +131,18 @@ namespace Emby.Server.Implementations.Logging
 
 
         private void LogInternal()
         private void LogInternal()
         {
         {
-            while (!_cancellationTokenSource.IsCancellationRequested)
+            while (!_cancellationTokenSource.IsCancellationRequested && !_disposed)
             {
             {
                 try
                 try
                 {
                 {
                     foreach (var message in _queue.GetConsumingEnumerable())
                     foreach (var message in _queue.GetConsumingEnumerable())
                     {
                     {
                         var bytes = Encoding.UTF8.GetBytes(message + Environment.NewLine);
                         var bytes = Encoding.UTF8.GetBytes(message + Environment.NewLine);
+                        if (_disposed)
+                        {
+                            return;
+                        }
+
                         _fileStream.Write(bytes, 0, bytes.Length);
                         _fileStream.Write(bytes, 0, bytes.Length);
 
 
                         _fileStream.Flush(true);
                         _fileStream.Flush(true);
@@ -166,17 +172,18 @@ namespace Emby.Server.Implementations.Logging
                 return;
                 return;
             }
             }
 
 
-            _fileStream.Flush();
+            _fileStream.Flush(true);
         }
         }
 
 
         public void Dispose()
         public void Dispose()
         {
         {
             _cancellationTokenSource.Cancel();
             _cancellationTokenSource.Cancel();
 
 
-            _disposed = true;
+            Flush();
 
 
-            _fileStream.Flush();
+            _disposed = true;
             _fileStream.Dispose();
             _fileStream.Dispose();
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 
 

+ 1 - 0
Emby.Server.Implementations/Net/NetAcceptSocket.cs

@@ -92,6 +92,7 @@ namespace Emby.Server.Implementations.Net
         public void Dispose()
         public void Dispose()
         {
         {
             Socket.Dispose();
             Socket.Dispose();
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/News/NewsEntryPoint.cs

@@ -271,6 +271,7 @@ namespace Emby.Server.Implementations.News
                 _timer.Dispose();
                 _timer.Dispose();
                 _timer = null;
                 _timer = null;
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/Notifications/Notifications.cs

@@ -551,6 +551,7 @@ namespace Emby.Server.Implementations.Notifications
 
 
             _deviceManager.CameraImageUploaded -= _deviceManager_CameraImageUploaded;
             _deviceManager.CameraImageUploaded -= _deviceManager_CameraImageUploaded;
             _userManager.UserLockedOut -= _userManager_UserLockedOut;
             _userManager.UserLockedOut -= _userManager_UserLockedOut;
+            GC.SuppressFinalize(this);
         }
         }
 
 
         private void DisposeLibraryUpdateTimer()
         private void DisposeLibraryUpdateTimer()

+ 3 - 1
Emby.Server.Implementations/Notifications/WebSocketNotifier.cs

@@ -1,4 +1,5 @@
-using MediaBrowser.Controller.Net;
+using System;
+using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Notifications;
 using MediaBrowser.Controller.Notifications;
 using MediaBrowser.Controller.Plugins;
 using MediaBrowser.Controller.Plugins;
 using System.Linq;
 using System.Linq;
@@ -49,6 +50,7 @@ namespace Emby.Server.Implementations.Notifications
         public void Dispose()
         public void Dispose()
         {
         {
             _notificationsRepo.NotificationAdded -= _notificationsRepo_NotificationAdded;
             _notificationsRepo.NotificationAdded -= _notificationsRepo_NotificationAdded;
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 5
Emby.Server.Implementations/Session/HttpSessionController.cs

@@ -14,7 +14,7 @@ using System.Threading.Tasks;
 
 
 namespace Emby.Server.Implementations.Session
 namespace Emby.Server.Implementations.Session
 {
 {
-    public class HttpSessionController : ISessionController, IDisposable
+    public class HttpSessionController : ISessionController
     {
     {
         private readonly IHttpClient _httpClient;
         private readonly IHttpClient _httpClient;
         private readonly IJsonSerializer _json;
         private readonly IJsonSerializer _json;
@@ -195,9 +195,5 @@ namespace Emby.Server.Implementations.Session
 
 
             return "?" + args;
             return "?" + args;
         }
         }
-
-        public void Dispose()
-        {
-        }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/Session/SessionWebSocketListener.cs

@@ -102,6 +102,7 @@ namespace Emby.Server.Implementations.Session
         public void Dispose()
         public void Dispose()
         {
         {
             _serverManager.WebSocketConnected -= _serverManager_WebSocketConnected;
             _serverManager.WebSocketConnected -= _serverManager_WebSocketConnected;
+            GC.SuppressFinalize(this);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 1 - 0
Emby.Server.Implementations/Session/WebSocketController.cs

@@ -283,6 +283,7 @@ namespace Emby.Server.Implementations.Session
             {
             {
                 socket.Closed -= connection_Closed;
                 socket.Closed -= connection_Closed;
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/TV/SeriesPostScanTask.cs

@@ -217,6 +217,7 @@ namespace Emby.Server.Implementations.TV
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 1 - 0
Emby.Server.Implementations/Threading/CommonTimer.cs

@@ -31,6 +31,7 @@ namespace Emby.Server.Implementations.Threading
         public void Dispose()
         public void Dispose()
         {
         {
             _timer.Dispose();
             _timer.Dispose();
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
Emby.Server.Implementations/Updates/InstallationManager.cs

@@ -722,6 +722,7 @@ namespace Emby.Server.Implementations.Updates
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 2 - 6
MediaBrowser.Api/ApiEntryPoint.cs

@@ -81,18 +81,14 @@ namespace MediaBrowser.Api
             return value.Split(separator);
             return value.Split(separator);
         }
         }
 
 
-        /// <summary>
-        /// Runs this instance.
-        /// </summary>
         public void Run()
         public void Run()
         {
         {
+            
         }
         }
 
 
-        /// <summary>
-        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
-        /// </summary>
         public void Dispose()
         public void Dispose()
         {
         {
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
MediaBrowser.Api/BasePeriodicWebSocketListener.cs

@@ -314,6 +314,7 @@ namespace MediaBrowser.Api
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 
 

+ 1 - 0
MediaBrowser.Common/Net/HttpResponseInfo.cs

@@ -70,6 +70,7 @@ namespace MediaBrowser.Common.Net
             {
             {
                 _disposable.Dispose();
                 _disposable.Dispose();
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 1
MediaBrowser.Common/Net/IHttpClient.cs

@@ -9,7 +9,7 @@ namespace MediaBrowser.Common.Net
     /// <summary>
     /// <summary>
     /// Interface IHttpClient
     /// Interface IHttpClient
     /// </summary>
     /// </summary>
-    public interface IHttpClient : IDisposable
+    public interface IHttpClient
     {
     {
         /// <summary>
         /// <summary>
         /// Gets the response.
         /// Gets the response.

+ 1 - 0
MediaBrowser.Common/Progress/ActionableProgress.cs

@@ -30,6 +30,7 @@ namespace MediaBrowser.Common.Progress
         public void Dispose()
         public void Dispose()
         {
         {
             Dispose(true);
             Dispose(true);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         /// <summary>
         /// <summary>

+ 1 - 1
MediaBrowser.Controller/Drawing/IImageEncoder.cs

@@ -3,7 +3,7 @@ using MediaBrowser.Model.Drawing;
 
 
 namespace MediaBrowser.Controller.Drawing
 namespace MediaBrowser.Controller.Drawing
 {
 {
-    public interface IImageEncoder : IDisposable
+    public interface IImageEncoder
     {
     {
         /// <summary>
         /// <summary>
         /// Gets the supported input formats.
         /// Gets the supported input formats.

+ 1 - 0
MediaBrowser.Controller/Drawing/ImageStream.cs

@@ -23,6 +23,7 @@ namespace MediaBrowser.Controller.Drawing
             {
             {
                 Stream.Dispose();
                 Stream.Dispose();
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
MediaBrowser.Controller/Session/SessionInfo.cs

@@ -303,6 +303,7 @@ namespace MediaBrowser.Controller.Session
 
 
             StopAutomaticProgress();
             StopAutomaticProgress();
             _sessionManager = null;
             _sessionManager = null;
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
MediaBrowser.Model/Net/HttpResponse.cs

@@ -59,6 +59,7 @@ namespace MediaBrowser.Model.Net
             {
             {
                 _disposable.Dispose();
                 _disposable.Dispose();
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 0
MediaBrowser.Providers/Manager/ProviderManager.cs

@@ -1110,6 +1110,7 @@ namespace MediaBrowser.Providers.Manager
             {
             {
                 _disposeCancellationTokenSource.Cancel();
                 _disposeCancellationTokenSource.Cancel();
             }
             }
+            GC.SuppressFinalize(this);
         }
         }
     }
     }
 }
 }

+ 1 - 14
MediaBrowser.Providers/Movies/MovieDbProvider.cs

@@ -29,7 +29,7 @@ namespace MediaBrowser.Providers.Movies
     /// <summary>
     /// <summary>
     /// Class MovieDbProvider
     /// Class MovieDbProvider
     /// </summary>
     /// </summary>
-    public class MovieDbProvider : IRemoteMetadataProvider<Movie, MovieInfo>, IDisposable, IHasOrder
+    public class MovieDbProvider : IRemoteMetadataProvider<Movie, MovieInfo>, IHasOrder
     {
     {
         internal static MovieDbProvider Current { get; private set; }
         internal static MovieDbProvider Current { get; private set; }
 
 
@@ -130,14 +130,6 @@ namespace MediaBrowser.Providers.Movies
             get { return "TheMovieDb"; }
             get { return "TheMovieDb"; }
         }
         }
 
 
-        /// <summary>
-        /// Releases unmanaged and - optionally - managed resources.
-        /// </summary>
-        /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
-        protected virtual void Dispose(bool dispose)
-        {
-        }
-
         /// <summary>
         /// <summary>
         /// The _TMDB settings task
         /// The _TMDB settings task
         /// </summary>
         /// </summary>
@@ -434,11 +426,6 @@ namespace MediaBrowser.Providers.Movies
             return await _httpClient.Get(options).ConfigureAwait(false);
             return await _httpClient.Get(options).ConfigureAwait(false);
         }
         }
 
 
-        public void Dispose()
-        {
-            Dispose(true);
-        }
-
         /// <summary>
         /// <summary>
         /// Class TmdbTitle
         /// Class TmdbTitle
         /// </summary>
         /// </summary>

+ 12 - 10
MediaBrowser.Server.Mac/Main.cs

@@ -56,20 +56,22 @@ namespace MediaBrowser.Server.Mac
 
 
 			var appPaths = CreateApplicationPaths(appFolderPath, customProgramDataPath);
 			var appPaths = CreateApplicationPaths(appFolderPath, customProgramDataPath);
 
 
-			var logManager = new SimpleLogManager(appPaths.LogDirectoryPath, "server");
-			logManager.ReloadLogger(LogSeverity.Info);
-			logManager.AddConsoleOutput();
+		    using (var logManager = new SimpleLogManager(appPaths.LogDirectoryPath, "server"))
+		    {
+		        logManager.ReloadLogger(LogSeverity.Info);
+		        logManager.AddConsoleOutput();
 
 
-			var logger = _logger = logManager.GetLogger("Main");
+		        var logger = _logger = logManager.GetLogger("Main");
 
 
-			ApplicationHost.LogEnvironmentInfo(logger, appPaths, true);
+		        ApplicationHost.LogEnvironmentInfo(logger, appPaths, true);
 
 
-			AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
+		        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
 
 
-			StartApplication(appPaths, logManager, options);
-			NSApplication.Init ();
-			NSApplication.Main (args);
-		}
+		        StartApplication(appPaths, logManager, options);
+		        NSApplication.Init();
+		        NSApplication.Main(args);
+		    }
+        }
 
 
 		private static ServerApplicationPaths CreateApplicationPaths(string appFolderPath, string programDataPath)
 		private static ServerApplicationPaths CreateApplicationPaths(string appFolderPath, string programDataPath)
 		{
 		{

+ 19 - 17
MediaBrowser.Server.Mono/Program.cs

@@ -50,28 +50,30 @@ namespace MediaBrowser.Server.Mono
 
 
             var appPaths = CreateApplicationPaths(applicationPath, customProgramDataPath);
             var appPaths = CreateApplicationPaths(applicationPath, customProgramDataPath);
 
 
-            var logManager = new SimpleLogManager(appPaths.LogDirectoryPath, "server");
-            logManager.ReloadLogger(LogSeverity.Info);
-            logManager.AddConsoleOutput();
+            using (var logManager = new SimpleLogManager(appPaths.LogDirectoryPath, "server"))
+            {
+                logManager.ReloadLogger(LogSeverity.Info);
+                logManager.AddConsoleOutput();
 
 
-            var logger = _logger = logManager.GetLogger("Main");
+                var logger = _logger = logManager.GetLogger("Main");
 
 
-            ApplicationHost.LogEnvironmentInfo(logger, appPaths, true);
-            
-            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
+                ApplicationHost.LogEnvironmentInfo(logger, appPaths, true);
 
 
-            try
-            {
-                RunApplication(appPaths, logManager, options);
-            }
-            finally
-            {
-                _logger.Info("Disposing app host");
-                _appHost.Dispose();
+                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
 
 
-                if (_restartOnShutdown)
+                try
                 {
                 {
-                    StartNewInstance(options);
+                    RunApplication(appPaths, logManager, options);
+                }
+                finally
+                {
+                    _logger.Info("Disposing app host");
+                    _appHost.Dispose();
+
+                    if (_restartOnShutdown)
+                    {
+                        StartNewInstance(options);
+                    }
                 }
                 }
             }
             }
         }
         }

+ 54 - 52
MediaBrowser.ServerApplication/MainStartup.cs

@@ -72,69 +72,71 @@ namespace MediaBrowser.ServerApplication
 
 
             var appPaths = CreateApplicationPaths(ApplicationPath, IsRunningAsService);
             var appPaths = CreateApplicationPaths(ApplicationPath, IsRunningAsService);
 
 
-            var logManager = new SimpleLogManager(appPaths.LogDirectoryPath, "server");
-            logManager.ReloadLogger(LogSeverity.Debug);
-            logManager.AddConsoleOutput();
+            using (var logManager = new SimpleLogManager(appPaths.LogDirectoryPath, "server"))
+            {
+                logManager.ReloadLogger(LogSeverity.Debug);
+                logManager.AddConsoleOutput();
 
 
-            var logger = _logger = logManager.GetLogger("Main");
+                var logger = _logger = logManager.GetLogger("Main");
 
 
-            ApplicationHost.LogEnvironmentInfo(logger, appPaths, true);
+                ApplicationHost.LogEnvironmentInfo(logger, appPaths, true);
 
 
-            // Install directly
-            if (options.ContainsOption("-installservice"))
-            {
-                logger.Info("Performing service installation");
-                InstallService(ApplicationPath, logger);
-                return;
-            }
+                // Install directly
+                if (options.ContainsOption("-installservice"))
+                {
+                    logger.Info("Performing service installation");
+                    InstallService(ApplicationPath, logger);
+                    return;
+                }
 
 
-            // Restart with admin rights, then install
-            if (options.ContainsOption("-installserviceasadmin"))
-            {
-                logger.Info("Performing service installation");
-                RunServiceInstallation(ApplicationPath);
-                return;
-            }
+                // Restart with admin rights, then install
+                if (options.ContainsOption("-installserviceasadmin"))
+                {
+                    logger.Info("Performing service installation");
+                    RunServiceInstallation(ApplicationPath);
+                    return;
+                }
 
 
-            // Uninstall directly
-            if (options.ContainsOption("-uninstallservice"))
-            {
-                logger.Info("Performing service uninstallation");
-                UninstallService(ApplicationPath, logger);
-                return;
-            }
+                // Uninstall directly
+                if (options.ContainsOption("-uninstallservice"))
+                {
+                    logger.Info("Performing service uninstallation");
+                    UninstallService(ApplicationPath, logger);
+                    return;
+                }
 
 
-            // Restart with admin rights, then uninstall
-            if (options.ContainsOption("-uninstallserviceasadmin"))
-            {
-                logger.Info("Performing service uninstallation");
-                RunServiceUninstallation(ApplicationPath);
-                return;
-            }
+                // Restart with admin rights, then uninstall
+                if (options.ContainsOption("-uninstallserviceasadmin"))
+                {
+                    logger.Info("Performing service uninstallation");
+                    RunServiceUninstallation(ApplicationPath);
+                    return;
+                }
 
 
-            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
+                AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
 
 
-            RunServiceInstallationIfNeeded(ApplicationPath);
+                RunServiceInstallationIfNeeded(ApplicationPath);
 
 
-            if (IsAlreadyRunning(ApplicationPath, currentProcess))
-            {
-                logger.Info("Shutting down because another instance of Emby Server is already running.");
-                return;
-            }
+                if (IsAlreadyRunning(ApplicationPath, currentProcess))
+                {
+                    logger.Info("Shutting down because another instance of Emby Server is already running.");
+                    return;
+                }
 
 
-            if (PerformUpdateIfNeeded(appPaths, logger))
-            {
-                logger.Info("Exiting to perform application update.");
-                return;
-            }
+                if (PerformUpdateIfNeeded(appPaths, logger))
+                {
+                    logger.Info("Exiting to perform application update.");
+                    return;
+                }
 
 
-            try
-            {
-                RunApplication(appPaths, logManager, IsRunningAsService, options);
-            }
-            finally
-            {
-                OnServiceShutdown();
+                try
+                {
+                    RunApplication(appPaths, logManager, IsRunningAsService, options);
+                }
+                finally
+                {
+                    OnServiceShutdown();
+                }
             }
             }
         }
         }
 
 

+ 1 - 0
MediaBrowser.XbmcMetadata/EntryPoint.cs

@@ -81,6 +81,7 @@ namespace MediaBrowser.XbmcMetadata
         public void Dispose()
         public void Dispose()
         {
         {
             _userDataManager.UserDataSaved -= _userDataManager_UserDataSaved;
             _userDataManager.UserDataSaved -= _userDataManager_UserDataSaved;
+            GC.SuppressFinalize(this);
         }
         }
 
 
         private async void SaveMetadataForItem(BaseItem item, ItemUpdateType updateReason)
         private async void SaveMetadataForItem(BaseItem item, ItemUpdateType updateReason)

+ 1 - 1
SharedVersion.cs

@@ -1,3 +1,3 @@
 using System.Reflection;
 using System.Reflection;
 
 
-[assembly: AssemblyVersion("3.2.30.7")]
+[assembly: AssemblyVersion("3.2.30.8")]

+ 1 - 0
SocketHttpListener/Net/HttpListener.cs

@@ -248,6 +248,7 @@ namespace SocketHttpListener.Net
 
 
             Close(true); //TODO: Should we force here or not?
             Close(true); //TODO: Should we force here or not?
             disposed = true;
             disposed = true;
+            GC.SuppressFinalize(this);
         }
         }
 
 
         internal void CheckDisposed()
         internal void CheckDisposed()

+ 1 - 0
SocketHttpListener/WebSocket.cs

@@ -880,6 +880,7 @@ namespace SocketHttpListener
         void IDisposable.Dispose()
         void IDisposable.Dispose()
         {
         {
             Close(CloseStatusCode.Away, null);
             Close(CloseStatusCode.Away, null);
+            GC.SuppressFinalize(this);
         }
         }
 
 
         #endregion
         #endregion