#21 handle sigterm and sigint

pull/32/head
Geoffrey Merck 4 years ago
parent 5144dd4d9c
commit 6137590583

@ -46,6 +46,8 @@
#include "APRSGPSDIdFrameProvider.h"
#include "APRSFixedIdFrameProvider.h"
CDStarGatewayApp * CDStarGatewayApp::g_app = nullptr;
#ifdef UNIT_TESTS
int fakemain(int argc, char *argv[])
#else
@ -58,7 +60,8 @@ int main(int argc, char *argv[])
signal(SIGILL, CDStarGatewayApp::sigHandlerFatal);
signal(SIGFPE, CDStarGatewayApp::sigHandlerFatal);
signal(SIGABRT, CDStarGatewayApp::sigHandlerFatal);
// signal(SIGTERM, CDStarGatewayApp::sigHandler);
signal(SIGTERM, CDStarGatewayApp::sigHandler);
signal(SIGINT, CDStarGatewayApp::sigHandler);
setbuf(stdout, NULL);
if (2 != argc) {
@ -89,6 +92,7 @@ int main(int argc, char *argv[])
CDStarGatewayApp::CDStarGatewayApp(const std::string &configFile) : m_configFile(configFile), m_thread(NULL)
{
g_app = this;
}
CDStarGatewayApp::~CDStarGatewayApp()
@ -276,6 +280,15 @@ bool CDStarGatewayApp::createThread()
return true;
}
void CDStarGatewayApp::sigHandler(int sig)
{
CLog::logInfo("Caught signal : %s, shutting down gateway", strsignal(sig));
if(g_app != nullptr && g_app->m_thread != nullptr) {
g_app->m_thread->kill();
}
}
void CDStarGatewayApp::sigHandlerFatal(int sig)
{
CLog::logFatal("Caught signal : %s", strsignal(sig));
@ -289,7 +302,6 @@ void CDStarGatewayApp::sigHandlerFatal(int sig)
void CDStarGatewayApp::terminateHandler()
{
#ifdef DEBUG_DSTARGW
std::stringstream stackTrace;
stackTrace << boost::stacktrace::stacktrace();

@ -21,7 +21,6 @@
#include "DStarGatewayThread.h"
void __sigHandler(int sig);
class CDStarGatewayApp
{
@ -29,6 +28,7 @@ private:
std::string m_configFile;
CDStarGatewayThread *m_thread;
bool createThread();
static CDStarGatewayApp * g_app;
public:
CDStarGatewayApp(const std::string &configFile);
@ -38,5 +38,6 @@ public:
void run();
static void sigHandlerFatal(int sig);
static void sigHandler(int sig);
static void terminateHandler();
};

Loading…
Cancel
Save

Powered by TurnKey Linux.