diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-10-07 23:06:12 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-10-07 23:06:12 -0400 |
| commit | 9663252d10224a41bb35da006c8bd0248b98c169 (patch) | |
| tree | acbe4c273b66f9ad07ad57303cf600e140572f1f | |
| parent | a90908f0f72cfc27528e4df6516f9cca8897c818 (diff) | |
remove mutex from mono startup
| -rw-r--r-- | MediaBrowser.Mono.userprefs | 8 | ||||
| -rw-r--r-- | MediaBrowser.Server.Implementations/Session/SessionManager.cs | 38 | ||||
| -rw-r--r-- | MediaBrowser.Server.Mono/Program.cs | 53 |
3 files changed, 20 insertions, 79 deletions
diff --git a/MediaBrowser.Mono.userprefs b/MediaBrowser.Mono.userprefs index f07c9fbcf..1cbdc7c0a 100644 --- a/MediaBrowser.Mono.userprefs +++ b/MediaBrowser.Mono.userprefs @@ -1,13 +1,13 @@ <Properties> <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|x86" /> - <MonoDevelop.Ide.Workbench ActiveDocument="MediaBrowser.ServerApplication\ApplicationHost.cs"> + <MonoDevelop.Ide.Workbench ActiveDocument="MediaBrowser.Server.Mono\Program.cs"> <Files> <File FileName="MediaBrowser.Server.Implementations\HttpServer\HttpServer.cs" Line="1" Column="1" /> <File FileName="MediaBrowser.Server.Mono\FFMpeg\FFMpegDownloader.cs" Line="1" Column="1" /> - <File FileName="MediaBrowser.Server.Mono\Networking\NetworkManager.cs" Line="28" Column="9" /> + <File FileName="MediaBrowser.Server.Mono\Networking\NetworkManager.cs" Line="1" Column="1" /> <File FileName="MediaBrowser.ServerApplication\ApplicationHost.cs" Line="525" Column="50" /> - <File FileName="MediaBrowser.Server.Mono\Native\NativeApp.cs" Line="24" Column="4" /> - <File FileName="MediaBrowser.Server.Mono\Program.cs" Line="105" Column="17" /> + <File FileName="MediaBrowser.Server.Mono\Native\NativeApp.cs" Line="1" Column="1" /> + <File FileName="MediaBrowser.Server.Mono\Program.cs" Line="250" Column="64" /> </Files> </MonoDevelop.Ide.Workbench> <MonoDevelop.Ide.DebuggingService.Breakpoints> diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index d3b6bc59f..9fb9010e5 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -44,13 +44,11 @@ namespace MediaBrowser.Server.Implementations.Session /// <value>The configuration manager.</value> private readonly IServerConfigurationManager _configurationManager; - private object _sessionLock = new object(); - /// <summary> /// The _active connections /// </summary> - private readonly Dictionary<string, SessionInfo> _activeConnections = - new Dictionary<string, SessionInfo>(StringComparer.OrdinalIgnoreCase); + private readonly ConcurrentDictionary<string, SessionInfo> _activeConnections = + new ConcurrentDictionary<string, SessionInfo>(StringComparer.OrdinalIgnoreCase); /// <summary> /// Occurs when [playback start]. @@ -86,7 +84,7 @@ namespace MediaBrowser.Server.Implementations.Session /// <value>All connections.</value> public IEnumerable<SessionInfo> Sessions { - get { return _activeConnections.Values.ToList().OrderByDescending(c => c.LastActivityDate); } + get { return _activeConnections.Values.OrderByDescending(c => c.LastActivityDate).ToList(); } } /// <summary> @@ -195,28 +193,18 @@ namespace MediaBrowser.Server.Implementations.Session { var key = clientType + deviceId + appVersion; - lock (_sessionLock) + var connection = _activeConnections.GetOrAdd(key, keyName => new SessionInfo { - SessionInfo connection; + Client = clientType, + DeviceId = deviceId, + ApplicationVersion = appVersion, + Id = Guid.NewGuid() + }); - if (!_activeConnections.TryGetValue(key, out connection)) - { - connection = new SessionInfo - { - Client = clientType, - DeviceId = deviceId, - ApplicationVersion = appVersion, - Id = Guid.NewGuid() - }; - - _activeConnections[key] = connection; - } + connection.DeviceName = deviceName; + connection.User = user; - connection.DeviceName = deviceName; - connection.User = user; - - return connection; - } + return connection; } /// <summary> @@ -589,4 +577,4 @@ namespace MediaBrowser.Server.Implementations.Session return Task.WhenAll(tasks); } } -} +}
\ No newline at end of file diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index fddf9706d..2c2390a81 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -21,8 +21,6 @@ namespace MediaBrowser.Server.Mono { private static ApplicationHost _appHost; - private static Mutex _singleInstanceMutex; - private static ILogger _logger; private static MainWindow _mainWindow; @@ -45,18 +43,6 @@ namespace MediaBrowser.Server.Mono AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; - bool createdNew; - - //_singleInstanceMutex = new Mutex(true, @"Local\" + runningPath, out createdNew); - createdNew = true; - - if (!createdNew) - { - _singleInstanceMutex = null; - logger.Info("Shutting down because another instance of Media Browser Server is already running."); - return; - } - if (PerformUpdateIfNeeded(appPaths, logger)) { logger.Info("Exiting to perform application update."); @@ -71,8 +57,6 @@ namespace MediaBrowser.Server.Mono { logger.Info("Shutting down"); - ReleaseMutex(logger); - _appHost.Dispose(); } } @@ -231,24 +215,6 @@ namespace MediaBrowser.Server.Mono } /// <summary> - /// Releases the mutex. - /// </summary> - internal static void ReleaseMutex(ILogger logger) - { - if (_singleInstanceMutex == null) - { - return; - } - - logger.Debug("Releasing mutex"); - - _singleInstanceMutex.ReleaseMutex(); - _singleInstanceMutex.Close(); - _singleInstanceMutex.Dispose(); - _singleInstanceMutex = null; - } - - /// <summary> /// Performs the update if needed. /// </summary> /// <param name="appPaths">The app paths.</param> @@ -278,24 +244,11 @@ namespace MediaBrowser.Server.Mono public static void Restart() { - // Second instance will start first, so release the mutex and dispose the http server ahead of time - ReleaseMutex (_logger); - + // Second instance will start first, so dispose so that the http ports will be available to the new instance _appHost.Dispose(); - if (trayIcon != null) { - trayIcon.Visible = false; - trayIcon.Dispose (); - trayIcon = null; - } - - if (_mainWindow != null) { - _mainWindow.HideAll (); - _mainWindow.Dispose (); - _mainWindow = null; - } - - Application.Quit (); + // Right now this method will just shutdown, but not restart + Shutdown (); } } } |
