#include #include #include #include #include static HttpServer *server = NULL; static pthread_t xmpp_thr; static XMPPComponent *jabber = NULL; static void SignalHandler(int signal) { if (server && (signal == SIGTERM || signal == SIGINT)) { Log(LOG_INFO, "Killing thread..."); XMPPFinishCompStream(jabber); pthread_join(xmpp_thr, NULL); Log(LOG_INFO, "Stopping server..."); HttpServerStop(server); return; } if (signal == SIGPIPE) { Log(LOG_DEBUG, "Caught a SIGPIPE..."); } } bool ParseeInitialiseSignals(HttpServer *s, pthread_t xmpp, XMPPComponent *j) { struct sigaction sa; server = s; xmpp_thr = xmpp; jabber = j; sigfillset(&sa.sa_mask); sa.sa_handler = SignalHandler; sa.sa_flags = SA_RESTART; #define Register(act) (sigaction(act, &sa, NULL) >= 0) if (!Register(SIGTERM) || !Register(SIGINT) || !Register(SIGPIPE)) { Log(LOG_ERR, "Couldn't register signals..."); return false; } #undef Register return true; }