kodi: update SIGTERM patch

This commit is contained in:
MilhouseVH 2017-07-07 17:37:22 +01:00
parent 4d596d32c5
commit ea8a1a232e

View File

@ -1,7 +1,7 @@
From 66fa8d82238e001dc81b0a266e323c6a2f8b11b2 Mon Sep 17 00:00:00 2001 From f7b15b94254a0af6009ed38cc45bcf63cb1b510d Mon Sep 17 00:00:00 2001
From: Stefan Saraev <stefan@saraev.ca> From: MilhouseVH <milhouseVH.github@nmacleod.com>
Date: Mon, 15 Dec 2014 21:28:54 +0200 Date: Tue, 4 Jul 2017 20:51:08 +0100
Subject: [PATCH 10/13] handle SIGTERM Subject: [PATCH] handle SIGTERM
0. CApplication::Stop cant be trusted. (deadlocks crashes and boo) 0. CApplication::Stop cant be trusted. (deadlocks crashes and boo)
@ -15,18 +15,18 @@ so, when shutdown/reboot is requested:
6. addons / pvrmanager / cec / everything else.. are free to deadlock / crash now, we dont care 6. addons / pvrmanager / cec / everything else.. are free to deadlock / crash now, we dont care
7. KILL 7. KILL
--- ---
xbmc/Application.cpp | 17 ++++++++++++----- xbmc/Application.cpp | 21 ++++++++++++++++-----
xbmc/Application.h | 1 + xbmc/Application.h | 1 +
xbmc/XBApplicationEx.cpp | 1 + xbmc/XBApplicationEx.cpp | 1 +
xbmc/XBApplicationEx.h | 1 + xbmc/XBApplicationEx.h | 1 +
xbmc/main/main.cpp | 15 +++++++++++++++ xbmc/platform/posix/main.cpp | 2 +-
5 files changed, 30 insertions(+), 5 deletions(-) 5 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
index 1c906a2..99ca567 100644 index ee50f37..28034c8 100644
--- a/xbmc/Application.cpp --- a/xbmc/Application.cpp
+++ b/xbmc/Application.cpp +++ b/xbmc/Application.cpp
@@ -2490,12 +2490,12 @@ void CApplication::OnApplicationMessage(ThreadMessage* pMsg) @@ -2355,12 +2355,12 @@ void CApplication::OnApplicationMessage(ThreadMessage* pMsg)
switch (pMsg->dwMessage) switch (pMsg->dwMessage)
{ {
case TMSG_POWERDOWN: case TMSG_POWERDOWN:
@ -39,9 +39,9 @@ index 1c906a2..99ca567 100644
- Stop(EXITCODE_QUIT); - Stop(EXITCODE_QUIT);
+ SetExitCode(EXITCODE_QUIT); + SetExitCode(EXITCODE_QUIT);
break; break;
case TMSG_SHUTDOWN: case TMSG_SHUTDOWN:
@@ -2539,12 +2539,13 @@ void CApplication::OnApplicationMessage(ThreadMessage* pMsg) @@ -2381,12 +2381,13 @@ void CApplication::OnApplicationMessage(ThreadMessage* pMsg)
case TMSG_RESTART: case TMSG_RESTART:
case TMSG_RESET: case TMSG_RESET:
@ -56,54 +56,58 @@ index 1c906a2..99ca567 100644
Stop(EXITCODE_RESTARTAPP); Stop(EXITCODE_RESTARTAPP);
#endif #endif
break; break;
@@ -2890,14 +2891,21 @@ bool CApplication::Cleanup() @@ -2805,6 +2806,17 @@ bool CApplication::Cleanup()
} }
} }
+void CApplication::SetExitCode(int exitCode) +void CApplication::SetExitCode(int exitCode)
+{ +{
+ // save it for CEC + if (!m_ExitCodeSet)
+ m_ExitCode = exitCode; + {
+ m_ExitCodeSet = true; + CLog::Log(LOGINFO, "Saving exitCode %d", exitCode);
+ // save it for CEC
+ m_ExitCode = exitCode;
+ m_ExitCodeSet = true;
+ }
+} +}
+ +
void CApplication::Stop(int exitCode) void CApplication::Stop(int exitCode)
{ {
try try
{ @@ -2812,7 +2824,7 @@ void CApplication::Stop(int exitCode)
m_frameMoveGuard.unlock(); m_frameMoveGuard.unlock();
CVariant vExitCode(CVariant::VariantTypeObject); CVariant vExitCode(CVariant::VariantTypeObject);
- vExitCode["exitcode"] = exitCode; - vExitCode["exitcode"] = exitCode;
+ vExitCode["exitcode"] = m_ExitCode; + vExitCode["exitcode"] = m_ExitCode;
CAnnouncementManager::GetInstance().Announce(System, "xbmc", "OnQuit", vExitCode); CAnnouncementManager::GetInstance().Announce(System, "xbmc", "OnQuit", vExitCode);
// Abort any active screensaver // Abort any active screensaver
@@ -2922,7 +2930,6 @@ void CApplication::Stop(int exitCode) @@ -2846,7 +2858,6 @@ void CApplication::Stop(int exitCode)
// Needs cleaning up
m_bStop = true; CApplicationMessenger::GetInstance().Stop();
m_AppFocused = false; m_AppFocused = false;
- m_ExitCode = exitCode; - m_ExitCode = exitCode;
CLog::Log(LOGNOTICE, "stop all"); CLog::Log(LOGNOTICE, "stop all");
// cancel any jobs from the jobmanager // cancel any jobs from the jobmanager
diff --git a/xbmc/Application.h b/xbmc/Application.h diff --git a/xbmc/Application.h b/xbmc/Application.h
index f1dfe0d..200abee 100644 index 1402787..c21ab93 100644
--- a/xbmc/Application.h --- a/xbmc/Application.h
+++ b/xbmc/Application.h +++ b/xbmc/Application.h
@@ -154,6 +154,7 @@ public: @@ -147,6 +147,7 @@ public:
void StartPVRManager(); bool StartServer(enum ESERVERS eServer, bool bStart, bool bWait = false);
void StopPVRManager();
bool IsCurrentThread() const; bool IsCurrentThread() const;
+ void SetExitCode(int exitCode); + void SetExitCode(int exitCode);
void Stop(int exitCode); void Stop(int exitCode);
void RestartApp(); void RestartApp();
void UnloadSkin(bool forReload = false); void UnloadSkin(bool forReload = false);
diff --git a/xbmc/XBApplicationEx.cpp b/xbmc/XBApplicationEx.cpp diff --git a/xbmc/XBApplicationEx.cpp b/xbmc/XBApplicationEx.cpp
index 048a6c1..fa99ac1 100644 index 035aed2..34102f5 100644
--- a/xbmc/XBApplicationEx.cpp --- a/xbmc/XBApplicationEx.cpp
+++ b/xbmc/XBApplicationEx.cpp +++ b/xbmc/XBApplicationEx.cpp
@@ -40,6 +40,7 @@ CXBApplicationEx::CXBApplicationEx() @@ -46,6 +46,7 @@ CXBApplicationEx::CXBApplicationEx()
m_bStop = false; m_bStop = false;
m_AppFocused = true; m_AppFocused = true;
m_ExitCode = EXITCODE_QUIT; m_ExitCode = EXITCODE_QUIT;
@ -112,10 +116,10 @@ index 048a6c1..fa99ac1 100644
} }
diff --git a/xbmc/XBApplicationEx.h b/xbmc/XBApplicationEx.h diff --git a/xbmc/XBApplicationEx.h b/xbmc/XBApplicationEx.h
index c46cba1..ed3f35f 100644 index 3c8dffd..e96bd5e 100644
--- a/xbmc/XBApplicationEx.h --- a/xbmc/XBApplicationEx.h
+++ b/xbmc/XBApplicationEx.h +++ b/xbmc/XBApplicationEx.h
@@ -40,6 +40,7 @@ public: @@ -42,6 +42,7 @@ public:
// Variables for timing // Variables for timing
bool m_bStop; bool m_bStop;
int m_ExitCode; int m_ExitCode;
@ -124,37 +128,18 @@ index c46cba1..ed3f35f 100644
bool m_renderGUI; bool m_renderGUI;
diff --git a/xbmc/platform/posix/main.cpp b/xbmc/platform/posix/main.cpp diff --git a/xbmc/platform/posix/main.cpp b/xbmc/platform/posix/main.cpp
index 01027f8..4cfb04e 100644 index bee93da..e36af76 100644
--- a/xbmc/platform/posix/main.cpp --- a/xbmc/platform/posix/main.cpp
+++ b/xbmc/platform/posix/main.cpp +++ b/xbmc/platform/posix/main.cpp
@@ -41,12 +41,27 @@ @@ -63,7 +63,7 @@ protected:
#include "input/linux/LIRC.h" void Process() override
#endif {
#include "platform/XbmcContext.h" CMessagePrinter::DisplayMessage("Exiting application");
+#include "Application.h" - KODI::MESSAGING::CApplicationMessenger::GetInstance().PostMsg(TMSG_QUIT);
+ + KODI::MESSAGING::CApplicationMessenger::GetInstance().PostMsg(TMSG_RESTARTAPP);
+void xbmc_term_handler(int signum) }
+{ };
+ CLog::Log(LOGINFO, "Received SIGTERM...");
+ if (!g_application.m_ExitCodeSet)
+ g_application.SetExitCode(EXITCODE_RESTARTAPP);
+ g_application.Stop(EXITCODE_RESTARTAPP);
+}
#ifdef __cplusplus
extern "C"
#endif
int main(int argc, char* argv[])
{
+ // SIGTERM handler
+ struct sigaction action;
+ memset(&action, 0, sizeof(struct sigaction));
+ action.sa_handler = xbmc_term_handler;
+ sigaction(SIGTERM, &action, NULL);
+
// set up some xbmc specific relationships
XBMC::Context context;
-- --
2.5.0 2.7.4