From b76fd4bf4120c01c27214dc482063ce4d0275e56 Mon Sep 17 00:00:00 2001 From: infactum Date: Fri, 8 Feb 2019 18:29:45 +0500 Subject: [PATCH] singal handler bug fix --- tg2sip/gateway.cpp | 7 ++++++- tg2sip/gateway.h | 2 +- tg2sip/main.cpp | 7 +------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tg2sip/gateway.cpp b/tg2sip/gateway.cpp index 84a4504..e242437 100755 --- a/tg2sip/gateway.cpp +++ b/tg2sip/gateway.cpp @@ -23,6 +23,8 @@ namespace td_api = td::td_api; #define CALL_PROTO_MIN_LAYER 65 +volatile sig_atomic_t e_flag = 0; + namespace state_machine::guards { bool IsIncoming::operator()(const td::td_api::object_ptr &event) const { return !event->call_->is_outgoing_; @@ -709,10 +711,13 @@ Gateway::Gateway(sip::Client &sip_client_, tg::Client &tg_client_, : sip_client_(sip_client_), tg_client_(tg_client_), logger_(std::move(logger_)), sip_events_(sip_events_), tg_events_(tg_events_), settings_(settings) {} -void Gateway::start(volatile sig_atomic_t e_flag) { +void Gateway::start() { load_cache(); + signal(SIGINT, [](int) { e_flag = 1; }); + signal(SIGTERM, [](int) { e_flag = 1; }); + while (!e_flag) { auto tick_start = std::chrono::steady_clock::now(); diff --git a/tg2sip/gateway.h b/tg2sip/gateway.h index 9274b4e..a6ad5df 100755 --- a/tg2sip/gateway.h +++ b/tg2sip/gateway.h @@ -270,7 +270,7 @@ public: Gateway &operator=(const Gateway &) = delete; - void start(volatile sig_atomic_t e_flag); + void start(); private: std::shared_ptr logger_; diff --git a/tg2sip/main.cpp b/tg2sip/main.cpp index 01acf4c..0e0d1af 100755 --- a/tg2sip/main.cpp +++ b/tg2sip/main.cpp @@ -26,8 +26,6 @@ #include "sip.h" #include "gateway.h" -volatile sig_atomic_t e_flag = 0; - int main() { pthread_setname_np(pthread_self(), "main"); @@ -80,10 +78,7 @@ int main() { auto gateway = std::make_unique(*sip_client, *tg_client, sip_events, tg_events, logger, settings); - signal(SIGINT, [](int) { e_flag = 1; }); - signal(SIGTERM, [](int) { e_flag = 1; }); - - gateway->start(e_flag); + gateway->start(); logger->info("performing a graceful shutdown..."); spdlog::drop_all();