fixes #166 - Multiple instance crash.

This commit is contained in:
Luke Pulverenti 2013-04-23 10:53:43 -04:00
parent 4a100452cf
commit 57dd61d209

View File

@ -24,12 +24,27 @@ namespace MediaBrowser.ServerApplication
/// </summary>
public partial class App : Application
{
/// <summary>
/// The single instance mutex
/// </summary>
private static Mutex _singleInstanceMutex;
/// <summary>
/// Defines the entry point of the application.
/// </summary>
[STAThread]
public static void Main()
{
bool createdNew;
_singleInstanceMutex = new Mutex(true, @"Local\" + typeof(App).Assembly.GetName().Name, out createdNew);
if (!createdNew)
{
_singleInstanceMutex = null;
return;
}
// Look for the existence of an update archive
var appPaths = new ServerApplicationPaths();
var updateArchive = Path.Combine(appPaths.TempUpdatePath, Constants.MbServerPkgName + ".zip");
@ -66,11 +81,6 @@ namespace MediaBrowser.ServerApplication
}
}
/// <summary>
/// The single instance mutex
/// </summary>
private Mutex SingleInstanceMutex;
/// <summary>
/// Gets or sets the logger.
/// </summary>
@ -107,15 +117,6 @@ namespace MediaBrowser.ServerApplication
/// <param name="e">A <see cref="T:System.Windows.StartupEventArgs" /> that contains the event data.</param>
protected override void OnStartup(StartupEventArgs e)
{
bool createdNew;
SingleInstanceMutex = new Mutex(true, @"Local\" + GetType().Assembly.GetName().Name, out createdNew);
if (!createdNew)
{
SingleInstanceMutex = null;
Shutdown();
return;
}
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
LoadKernel();
@ -190,23 +191,26 @@ namespace MediaBrowser.ServerApplication
base.OnExit(e);
if (CompositionRoot != null)
{
CompositionRoot.Dispose();
}
}
/// <summary>
/// Releases the mutex.
/// </summary>
private void ReleaseMutex()
{
if (SingleInstanceMutex == null)
if (_singleInstanceMutex == null)
{
return;
}
SingleInstanceMutex.ReleaseMutex();
SingleInstanceMutex.Close();
SingleInstanceMutex.Dispose();
SingleInstanceMutex = null;
_singleInstanceMutex.ReleaseMutex();
_singleInstanceMutex.Close();
_singleInstanceMutex.Dispose();
_singleInstanceMutex = null;
}
/// <summary>