mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-06 05:47:14 -04:00
improve service shutdown
This commit is contained in:
parent
4064b8bada
commit
d9fecd78a5
@ -534,14 +534,7 @@ namespace MediaBrowser.ServerApplication
|
||||
Logger.ErrorException("Error sending server restart web socket message", ex);
|
||||
}
|
||||
|
||||
// Second instance will start first, so release the mutex and dispose the http server ahead of time
|
||||
Application.Current.Dispatcher.Invoke(() => MainStartup.ReleaseMutex(Logger));
|
||||
|
||||
Dispose();
|
||||
|
||||
System.Windows.Forms.Application.Restart();
|
||||
|
||||
ShutdownInternal();
|
||||
MainStartup.Restart();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -661,15 +654,7 @@ namespace MediaBrowser.ServerApplication
|
||||
Logger.ErrorException("Error sending server shutdown web socket message", ex);
|
||||
}
|
||||
|
||||
ShutdownInternal();
|
||||
}
|
||||
|
||||
public void ShutdownInternal()
|
||||
{
|
||||
Logger.Info("Shutting down application");
|
||||
var app = Application.Current;
|
||||
|
||||
app.Dispatcher.Invoke(app.Shutdown);
|
||||
MainStartup.Shutdown();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -27,6 +27,10 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
private static App _app;
|
||||
|
||||
private static BackgroundService _backgroundService;
|
||||
|
||||
private static ILogger _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Defines the entry point of the application.
|
||||
/// </summary>
|
||||
@ -41,7 +45,7 @@ namespace MediaBrowser.ServerApplication
|
||||
var logManager = new NlogManager(appPaths.LogDirectoryPath, "server");
|
||||
logManager.ReloadLogger(LogSeverity.Info);
|
||||
|
||||
var logger = logManager.GetLogger("Main");
|
||||
var logger = _logger = logManager.GetLogger("Main");
|
||||
|
||||
BeginLog(logger);
|
||||
|
||||
@ -187,6 +191,8 @@ namespace MediaBrowser.ServerApplication
|
||||
service.Disposed += service_Disposed;
|
||||
|
||||
ServiceBase.Run(service);
|
||||
|
||||
_backgroundService = service;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -294,10 +300,10 @@ namespace MediaBrowser.ServerApplication
|
||||
/// <param name="e">The <see cref="SessionEndingEventArgs"/> instance containing the event data.</param>
|
||||
static void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
|
||||
{
|
||||
// Try to shutdown gracefully
|
||||
var task = _appHost.Shutdown();
|
||||
|
||||
Task.WaitAll(task);
|
||||
if (e.Reason == SessionEndReasons.SystemShutdown || _backgroundService == null)
|
||||
{
|
||||
Shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -309,7 +315,10 @@ namespace MediaBrowser.ServerApplication
|
||||
{
|
||||
var exception = (Exception)e.ExceptionObject;
|
||||
|
||||
_app.OnUnhandledException(exception);
|
||||
if (_backgroundService == null)
|
||||
{
|
||||
_app.OnUnhandledException(exception);
|
||||
}
|
||||
|
||||
if (!Debugger.IsAttached)
|
||||
{
|
||||
@ -365,5 +374,44 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void Shutdown()
|
||||
{
|
||||
if (_backgroundService != null)
|
||||
{
|
||||
_backgroundService.Stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
_app.Dispatcher.Invoke(_app.Shutdown);
|
||||
}
|
||||
}
|
||||
|
||||
public static void Restart()
|
||||
{
|
||||
// Second instance will start first, so release the mutex and dispose the http server ahead of time
|
||||
_app.Dispatcher.Invoke(() => ReleaseMutex(_logger));
|
||||
|
||||
_appHost.Dispose();
|
||||
|
||||
RestartInternal();
|
||||
|
||||
_app.Dispatcher.Invoke(_app.Shutdown);
|
||||
}
|
||||
|
||||
private static void RestartInternal()
|
||||
{
|
||||
if (_backgroundService == null)
|
||||
{
|
||||
System.Windows.Forms.Application.Restart();
|
||||
}
|
||||
else
|
||||
{
|
||||
//var controller = new ServiceController()
|
||||
//{
|
||||
// ServiceName = BackgroundService.Name
|
||||
//};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user