Setup a SIGINT handler
This commit is contained in:
parent
5b1a71198d
commit
ee76a2e854
44
main.cpp
44
main.cpp
@ -9,13 +9,18 @@
|
|||||||
#include <log4cpp/PatternLayout.hh>
|
#include <log4cpp/PatternLayout.hh>
|
||||||
|
|
||||||
#include <execinfo.h>
|
#include <execinfo.h>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "main.hpp"
|
#include "main.hpp"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
std::weak_ptr<boost::asio::io_service> g_ioService;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Code from http://stackoverflow.com/a/77336/5419223
|
* Code from http://stackoverflow.com/a/77336/5419223
|
||||||
*/
|
*/
|
||||||
static void sigsegv_handler(int sig) {
|
void sigsegv_handler(int sig) {
|
||||||
constexpr int STACK_DEPTH = 10;
|
constexpr int STACK_DEPTH = 10;
|
||||||
void *array[STACK_DEPTH];
|
void *array[STACK_DEPTH];
|
||||||
|
|
||||||
@ -26,8 +31,36 @@ static void sigsegv_handler(int sig) {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sigint_handler(int sig)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Caught SIGINT, trying to stop\n");
|
||||||
|
if (auto io = g_ioService.lock()) {
|
||||||
|
io->stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetupSignalHandlers()
|
||||||
|
{
|
||||||
|
struct sigaction sigIntHandler;
|
||||||
|
|
||||||
|
sigIntHandler.sa_handler = sigsegv_handler;
|
||||||
|
sigemptyset(&sigIntHandler.sa_mask);
|
||||||
|
sigIntHandler.sa_flags = 0;
|
||||||
|
|
||||||
|
sigaction(SIGSEGV, &sigIntHandler, NULL);
|
||||||
|
|
||||||
|
memset(&sigIntHandler, 0, sizeof(sigIntHandler));
|
||||||
|
sigIntHandler.sa_handler = sigint_handler;
|
||||||
|
sigemptyset(&sigIntHandler.sa_mask);
|
||||||
|
sigIntHandler.sa_flags = 0;
|
||||||
|
|
||||||
|
sigaction(SIGINT, &sigIntHandler, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
signal(SIGSEGV, sigsegv_handler);
|
SetupSignalHandlers();
|
||||||
int max_calls;
|
int max_calls;
|
||||||
|
|
||||||
log4cpp::OstreamAppender appender("console", &std::cout);
|
log4cpp::OstreamAppender appender("console", &std::cout);
|
||||||
@ -50,7 +83,8 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
sip::IncomingConnectionValidator connectionValidator(conf.getString("sip.validUriExpression"));
|
sip::IncomingConnectionValidator connectionValidator(conf.getString("sip.validUriExpression"));
|
||||||
|
|
||||||
boost::asio::io_service ioService;
|
auto ioService = std::make_shared<boost::asio::io_service>();
|
||||||
|
g_ioService = ioService;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
max_calls = conf.getInt("sip.max_calls");
|
max_calls = conf.getInt("sip.max_calls");
|
||||||
@ -136,7 +170,7 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
for (int i = 0; i<max_calls; i++) {
|
for (int i = 0; i<max_calls; i++) {
|
||||||
|
|
||||||
auto *mumcom = new mumble::MumbleCommunicator(ioService);
|
auto *mumcom = new mumble::MumbleCommunicator(*ioService);
|
||||||
mumcom->callId = i;
|
mumcom->callId = i;
|
||||||
|
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
@ -247,7 +281,7 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
logger.info("Application started.");
|
logger.info("Application started.");
|
||||||
|
|
||||||
ioService.run();
|
ioService->run();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user