mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 21:05:10 +00:00
56 lines
1.2 KiB
C
56 lines
1.2 KiB
C
#include <Cytoplasm/HttpServer.h>
|
|
#include <Cytoplasm/Log.h>
|
|
|
|
#include <pthread.h>
|
|
#include <signal.h>
|
|
|
|
#include <XMPP.h>
|
|
|
|
static ParseeData *data;
|
|
static pthread_t xmpp_thr;
|
|
|
|
static void
|
|
SignalHandler(int signal)
|
|
{
|
|
if (data->server && (signal == SIGTERM || signal == SIGINT))
|
|
{
|
|
Log(LOG_INFO, "Killing thread...");
|
|
|
|
pthread_mutex_lock(&data->halt_lock);
|
|
data->halted = true;
|
|
pthread_mutex_unlock(&data->halt_lock);
|
|
|
|
XMPPFinishCompStream(data->jabber);
|
|
pthread_join(xmpp_thr, NULL);
|
|
Log(LOG_INFO, "Stopping server...");
|
|
HttpServerStop(data->server);
|
|
return;
|
|
}
|
|
if (signal == SIGPIPE)
|
|
{
|
|
Log(LOG_DEBUG, "Caught a SIGPIPE...");
|
|
return;
|
|
}
|
|
}
|
|
|
|
bool
|
|
ParseeInitialiseSignals(ParseeData *d, pthread_t xmpp)
|
|
{
|
|
struct sigaction sa;
|
|
|
|
data = d;
|
|
xmpp_thr = xmpp;
|
|
|
|
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;
|
|
}
|