#include "Log.h"
#include <getopt.h>
#include <libgen.h> // basename
+#include <signal.h>
#include <list>
using std::list;
"\t-v: show version info\t\n"
"\nexample: LayerManagerService -w800 -h480 -d:0\n";
+bool g_LayerManagerRunning;
+
template<class T>
T* getCreateFunction(string libname)
{
}
}
+void signalHandler(int sig)
+{
+ switch (sig)
+ {
+ case SIGTERM:
+ g_LayerManagerRunning = false;
+ LOG_INFO("LayerManagerService", "Signal SIGTERM received. Shutting down.");
+ break;
+
+ case SIGINT:
+ g_LayerManagerRunning = false;
+ LOG_INFO("LayerManagerService", "Signal SIGINT received. Shutting down.");
+ break;
+
+ default:
+ LOG_INFO("LayerManagerService", "Signal " << sig << " received.");
+ }
+}
+
int main(int argc, char **argv)
{
parseCommandLine(argc, (char**) argv);
// must stay within main method or else application would completely exit
LOG_INFO("LayerManagerService", "Startup complete. EnterMainloop");
- while (true)
+
+ // setup signal handler and global flag to handle shutdown
+ g_LayerManagerRunning = true;
+ signal(SIGTERM, signalHandler);
+ signal(SIGINT, signalHandler);
+
+ while (g_LayerManagerRunning)
{
CommunicatorListIterator commIter = communicatorList.begin();
CommunicatorListIterator commIterEnd = communicatorList.end();
// cleanup
cleanup:
+ // reset signal handling to default
+ signal(SIGTERM, SIG_DFL);
+ signal(SIGINT, SIG_DFL);
+
LOG_INFO("LayerManagerService", "Exiting Application.");
pManager->stopManagement();
//delete pRenderer; TODO