From 380fb43324ccfb1b862d6d716544ee8ec6029a22 Mon Sep 17 00:00:00 2001 From: Oleksandr Ivantsiv Date: Tue, 15 Mar 2022 14:28:05 +0000 Subject: [PATCH] [asan] Trigger reports generation from SIGTERM handler. - Add SIGTERM handler to each application. --- cfgmgr/buffermgrd.cpp | 22 ++++++++++++++++++++++ cfgmgr/coppmgrd.cpp | 22 ++++++++++++++++++++++ cfgmgr/intfmgrd.cpp | 23 +++++++++++++++++++++++ cfgmgr/macsecmgrd.cpp | 20 ++++++++++++++++++++ cfgmgr/natmgrd.cpp | 10 ++++++++++ cfgmgr/nbrmgrd.cpp | 22 ++++++++++++++++++++++ cfgmgr/portmgrd.cpp | 22 ++++++++++++++++++++++ cfgmgr/sflowmgrd.cpp | 22 ++++++++++++++++++++++ cfgmgr/teammgrd.cpp | 7 +++++++ cfgmgr/tunnelmgrd.cpp | 22 ++++++++++++++++++++++ cfgmgr/vlanmgrd.cpp | 22 ++++++++++++++++++++++ cfgmgr/vrfmgrd.cpp | 22 ++++++++++++++++++++++ cfgmgr/vxlanmgrd.cpp | 22 ++++++++++++++++++++++ fdbsyncd/fdbsyncd.cpp | 22 ++++++++++++++++++++++ fpmsyncd/fpmsyncd.cpp | 22 ++++++++++++++++++++++ gearsyncd/gearsyncd.cpp | 24 ++++++++++++++++++++++++ mclagsyncd/mclagsyncd.cpp | 22 ++++++++++++++++++++++ natsyncd/natsyncd.cpp | 22 ++++++++++++++++++++++ neighsyncd/neighsyncd.cpp | 22 ++++++++++++++++++++++ orchagent/main.cpp | 22 ++++++++++++++++++++++ portsyncd/portsyncd.cpp | 23 +++++++++++++++++++++++ teamsyncd/teamsyncd.cpp | 7 +++++++ 22 files changed, 444 insertions(+) diff --git a/cfgmgr/buffermgrd.cpp b/cfgmgr/buffermgrd.cpp index 05932a9e3c..ca1f25224d 100644 --- a/cfgmgr/buffermgrd.cpp +++ b/cfgmgr/buffermgrd.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "dbconnector.h" #include "select.h" #include "exec.h" @@ -14,6 +15,10 @@ #include "json.hpp" #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; using json = nlohmann::json; @@ -109,6 +114,15 @@ shared_ptr> load_json(string file) } } +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { int opt; @@ -121,6 +135,14 @@ int main(int argc, char **argv) SWSS_LOG_NOTICE("--- Starting buffermgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + while ((opt = getopt(argc, argv, "l:a:p:z:h")) != -1 ) { switch (opt) diff --git a/cfgmgr/coppmgrd.cpp b/cfgmgr/coppmgrd.cpp index 60b0a2442a..84aaa32c6b 100644 --- a/cfgmgr/coppmgrd.cpp +++ b/cfgmgr/coppmgrd.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include "exec.h" #include "coppmgr.h" @@ -10,6 +11,10 @@ #include "select.h" #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -36,6 +41,15 @@ string gResponsePublisherRecordFile; /* Global database mutex */ mutex gDbMutex; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("coppmgrd"); @@ -43,6 +57,14 @@ int main(int argc, char **argv) SWSS_LOG_NOTICE("--- Starting coppmgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + try { vector cfg_copp_tables = { diff --git a/cfgmgr/intfmgrd.cpp b/cfgmgr/intfmgrd.cpp index 9ed3653333..e2701ae04d 100644 --- a/cfgmgr/intfmgrd.cpp +++ b/cfgmgr/intfmgrd.cpp @@ -1,6 +1,8 @@ #include #include #include +#include + #include "dbconnector.h" #include "select.h" #include "exec.h" @@ -10,6 +12,10 @@ #include #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -36,6 +42,15 @@ string gResponsePublisherRecordFile; /* Global database mutex */ mutex gDbMutex; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("intfmgrd"); @@ -43,6 +58,14 @@ int main(int argc, char **argv) SWSS_LOG_NOTICE("--- Starting intfmgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + try { vector cfg_intf_tables = { diff --git a/cfgmgr/macsecmgrd.cpp b/cfgmgr/macsecmgrd.cpp index 913c0ac4ee..d7c1c9a7e9 100644 --- a/cfgmgr/macsecmgrd.cpp +++ b/cfgmgr/macsecmgrd.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -17,6 +18,10 @@ #include "macsecmgr.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -45,9 +50,24 @@ string gResponsePublisherRecordFile; /* Global database mutex */ mutex gDbMutex; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif int main(int argc, char **argv) { +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif try { diff --git a/cfgmgr/natmgrd.cpp b/cfgmgr/natmgrd.cpp index c2baf7eb87..3155bf2c21 100644 --- a/cfgmgr/natmgrd.cpp +++ b/cfgmgr/natmgrd.cpp @@ -33,6 +33,10 @@ #include "shellcmd.h" #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -98,6 +102,12 @@ void sigterm_handler(int signo) natmgr->cleanupMangleIpTables(); natmgr->cleanupPoolIpTable(); } + +#if defined(ASAN_ENABLED) + __lsan_do_leak_check(); +#endif + signal(signo, SIG_DFL); + raise(signo); } int main(int argc, char **argv) diff --git a/cfgmgr/nbrmgrd.cpp b/cfgmgr/nbrmgrd.cpp index 338d8d9d0d..5359a938c6 100644 --- a/cfgmgr/nbrmgrd.cpp +++ b/cfgmgr/nbrmgrd.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "select.h" #include "exec.h" @@ -11,6 +12,10 @@ #include "nbrmgr.h" #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -40,6 +45,15 @@ string gResponsePublisherRecordFile; /* Global database mutex */ mutex gDbMutex; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("nbrmgrd"); @@ -47,6 +61,14 @@ int main(int argc, char **argv) SWSS_LOG_NOTICE("--- Starting nbrmgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + try { vector cfg_nbr_tables = { diff --git a/cfgmgr/portmgrd.cpp b/cfgmgr/portmgrd.cpp index 180bbc1d63..fdaebdb1d1 100644 --- a/cfgmgr/portmgrd.cpp +++ b/cfgmgr/portmgrd.cpp @@ -3,12 +3,17 @@ #include #include #include +#include #include "exec.h" #include "portmgr.h" #include "schema.h" #include "select.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -35,6 +40,15 @@ string gResponsePublisherRecordFile; /* Global database mutex */ mutex gDbMutex; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("portmgrd"); @@ -42,6 +56,14 @@ int main(int argc, char **argv) SWSS_LOG_NOTICE("--- Starting portmgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + try { vector cfg_port_tables = { diff --git a/cfgmgr/sflowmgrd.cpp b/cfgmgr/sflowmgrd.cpp index 7de5f15a2d..0acef8afeb 100644 --- a/cfgmgr/sflowmgrd.cpp +++ b/cfgmgr/sflowmgrd.cpp @@ -3,12 +3,17 @@ #include #include #include +#include #include "exec.h" #include "sflowmgr.h" #include "schema.h" #include "select.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -35,6 +40,15 @@ string gResponsePublisherRecordFile; /* Global database mutex */ mutex gDbMutex; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("sflowmgrd"); @@ -42,6 +56,14 @@ int main(int argc, char **argv) SWSS_LOG_NOTICE("--- Starting sflowmgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + try { vector cfg_sflow_tables = { diff --git a/cfgmgr/teammgrd.cpp b/cfgmgr/teammgrd.cpp index 66bfa4b6d2..a483f629a1 100644 --- a/cfgmgr/teammgrd.cpp +++ b/cfgmgr/teammgrd.cpp @@ -7,6 +7,10 @@ #include "warm_restart.h" #include +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -26,6 +30,9 @@ bool received_sigterm = false; void sig_handler(int signo) { +#if defined(ASAN_ENABLED) + __lsan_do_leak_check(); +#endif received_sigterm = true; return; } diff --git a/cfgmgr/tunnelmgrd.cpp b/cfgmgr/tunnelmgrd.cpp index 0165eb94b5..cffef8d70b 100644 --- a/cfgmgr/tunnelmgrd.cpp +++ b/cfgmgr/tunnelmgrd.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "dbconnector.h" #include "select.h" @@ -12,6 +13,10 @@ #include "schema.h" #include "tunnelmgr.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -38,12 +43,29 @@ string gResponsePublisherRecordFile; /* Global database mutex */ mutex gDbMutex; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("tunnelmgrd"); SWSS_LOG_NOTICE("--- Starting Tunnelmgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + try { vector cfgTunTables = { diff --git a/cfgmgr/vlanmgrd.cpp b/cfgmgr/vlanmgrd.cpp index b69dc78122..09a33cdb92 100644 --- a/cfgmgr/vlanmgrd.cpp +++ b/cfgmgr/vlanmgrd.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "dbconnector.h" #include "select.h" #include "exec.h" @@ -15,6 +16,10 @@ #include "shellcmd.h" #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -43,6 +48,15 @@ string gResponsePublisherRecordFile; /* Global database mutex */ mutex gDbMutex; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("vlanmgrd"); @@ -50,6 +64,14 @@ int main(int argc, char **argv) SWSS_LOG_NOTICE("--- Starting vlanmgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + try { vector cfg_vlan_tables = { diff --git a/cfgmgr/vrfmgrd.cpp b/cfgmgr/vrfmgrd.cpp index 735e59191d..7944722a8a 100644 --- a/cfgmgr/vrfmgrd.cpp +++ b/cfgmgr/vrfmgrd.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include "dbconnector.h" #include "select.h" #include "exec.h" @@ -10,6 +11,10 @@ #include #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -36,6 +41,15 @@ string gResponsePublisherRecordFile; /* Global database mutex */ mutex gDbMutex; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("vrfmgrd"); @@ -44,6 +58,14 @@ int main(int argc, char **argv) SWSS_LOG_NOTICE("--- Starting vrfmgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + try { vector cfg_vrf_tables = { diff --git a/cfgmgr/vxlanmgrd.cpp b/cfgmgr/vxlanmgrd.cpp index d47893a614..dfbd6dc9b1 100644 --- a/cfgmgr/vxlanmgrd.cpp +++ b/cfgmgr/vxlanmgrd.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "dbconnector.h" #include "select.h" #include "exec.h" @@ -15,6 +16,10 @@ #include "shellcmd.h" #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -42,12 +47,29 @@ string gResponsePublisherRecordFile; mutex gDbMutex; MacAddress gMacAddress; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("vxlanmgrd"); SWSS_LOG_NOTICE("--- Starting vxlanmgrd ---"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + try { diff --git a/fdbsyncd/fdbsyncd.cpp b/fdbsyncd/fdbsyncd.cpp index a83b2693e1..a9df76ce4b 100644 --- a/fdbsyncd/fdbsyncd.cpp +++ b/fdbsyncd/fdbsyncd.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "logger.h" #include "select.h" #include "netdispatcher.h" @@ -9,13 +10,34 @@ #include "fdbsyncd/fdbsync.h" #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("fdbsyncd"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + DBConnector appDb(APPL_DB, DBConnector::DEFAULT_UNIXSOCKET, 0); RedisPipeline pipelineAppDB(&appDb); DBConnector stateDb(STATE_DB, DBConnector::DEFAULT_UNIXSOCKET, 0); diff --git a/fpmsyncd/fpmsyncd.cpp b/fpmsyncd/fpmsyncd.cpp index 8f797e178c..8f03a511a4 100644 --- a/fpmsyncd/fpmsyncd.cpp +++ b/fpmsyncd/fpmsyncd.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "logger.h" #include "select.h" #include "selectabletimer.h" @@ -8,6 +9,9 @@ #include "fpmsyncd/fpmlink.h" #include "fpmsyncd/routesync.h" +#if defined(ASAN_ENABLED) +#include +#endif using namespace std; using namespace swss; @@ -44,9 +48,27 @@ static bool eoiuFlagsSet(Table &bgpStateTable) return true; } +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { swss::Logger::linkToDbNative("fpmsyncd"); + +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + DBConnector db("APPL_DB", 0); RedisPipeline pipeline(&db); RouteSync sync(&pipeline); diff --git a/gearsyncd/gearsyncd.cpp b/gearsyncd/gearsyncd.cpp index f79b079d82..1bede3e5aa 100644 --- a/gearsyncd/gearsyncd.cpp +++ b/gearsyncd/gearsyncd.cpp @@ -18,6 +18,8 @@ #include #include #include +#include + #include "dbconnector.h" #include "producerstatetable.h" #include "warm_restart.h" @@ -27,6 +29,10 @@ #include +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -37,6 +43,15 @@ void usage() cout << " use configDB data if not specified" << endl; } +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + bool handleGearboxConfigFile(string file, bool warm); bool handleGearboxConfigFromConfigDB(ProducerStateTable &p, DBConnector &cfgDb, bool warm); @@ -53,6 +68,15 @@ static void notifyGearboxConfigDone(ProducerStateTable &p, bool success) int main(int argc, char **argv) { Logger::linkToDbNative("gearsyncd"); + +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + int opt; string gearbox_config_file; map gearbox_cfg_map; diff --git a/mclagsyncd/mclagsyncd.cpp b/mclagsyncd/mclagsyncd.cpp index bbd48a7e50..49aec3e5e0 100644 --- a/mclagsyncd/mclagsyncd.cpp +++ b/mclagsyncd/mclagsyncd.cpp @@ -18,6 +18,7 @@ * Maintainer: Jim Jiang from nephos */ #include +#include #include "logger.h" #include #include "select.h" @@ -27,13 +28,34 @@ #include "schema.h" #include +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { swss::Logger::linkToDbNative("mclagsyncd"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + DBConnector appl_db("APPL_DB", 0); RedisPipeline pipeline(&appl_db); diff --git a/natsyncd/natsyncd.cpp b/natsyncd/natsyncd.cpp index c8591f2c06..c4c8cd9d7b 100644 --- a/natsyncd/natsyncd.cpp +++ b/natsyncd/natsyncd.cpp @@ -2,19 +2,41 @@ #include #include #include +#include #include "logger.h" #include "select.h" #include "netdispatcher.h" #include "natsync.h" #include +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("natsyncd"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + DBConnector appDb("APPL_DB", 0); DBConnector stateDb("STATE_DB", 0); RedisPipeline pipelineAppDB(&appDb); diff --git a/neighsyncd/neighsyncd.cpp b/neighsyncd/neighsyncd.cpp index a0882c28e2..6c1ba772e5 100644 --- a/neighsyncd/neighsyncd.cpp +++ b/neighsyncd/neighsyncd.cpp @@ -2,19 +2,41 @@ #include #include #include +#include #include "logger.h" #include "select.h" #include "netdispatcher.h" #include "netlink.h" #include "neighsyncd/neighsync.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + int main(int argc, char **argv) { Logger::linkToDbNative("neighsyncd"); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + DBConnector appDb("APPL_DB", 0); RedisPipeline pipelineAppDB(&appDb); DBConnector stateDb("STATE_DB", 0); diff --git a/orchagent/main.cpp b/orchagent/main.cpp index 6ab699bcc5..03177cc6f8 100644 --- a/orchagent/main.cpp +++ b/orchagent/main.cpp @@ -17,6 +17,7 @@ extern "C" { #include #include #include +#include #include #include "timestamp.h" @@ -32,6 +33,10 @@ extern "C" { #include "warm_restart.h" #include "gearboxutils.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -114,6 +119,15 @@ void sighup_handler(int signo) gResponsePublisherLogRotate = true; } +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + void syncd_apply_view() { SWSS_LOG_NOTICE("Notify syncd APPLY_VIEW"); @@ -319,6 +333,14 @@ int main(int argc, char **argv) SWSS_LOG_ENTER(); +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + WarmStart::initialize("orchagent", "swss"); WarmStart::checkWarmStart("orchagent", "swss"); diff --git a/portsyncd/portsyncd.cpp b/portsyncd/portsyncd.cpp index 37e0c4232f..feee89a632 100644 --- a/portsyncd/portsyncd.cpp +++ b/portsyncd/portsyncd.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "dbconnector.h" #include "select.h" #include "netdispatcher.h" @@ -17,6 +18,10 @@ #include "exec.h" #include "warm_restart.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -35,6 +40,15 @@ using namespace swss; set g_portSet; bool g_init = false; +#if defined(ASAN_ENABLED) +void sigterm_handler(int signo) +{ + __lsan_do_leak_check(); + signal(signo, SIG_DFL); + raise(signo); +} +#endif + void usage() { cout << "Usage: portsyncd" << endl; @@ -51,6 +65,15 @@ void checkPortInitDone(DBConnector *appl_db); int main(int argc, char **argv) { Logger::linkToDbNative("portsyncd"); + +#if defined(ASAN_ENABLED) + if (signal(SIGTERM, sigterm_handler) == SIG_ERR) + { + SWSS_LOG_ERROR("failed to setup SIGTERM action"); + exit(1); + } +#endif + int opt; map port_cfg_map; diff --git a/teamsyncd/teamsyncd.cpp b/teamsyncd/teamsyncd.cpp index c5190f46b1..eb8833a188 100644 --- a/teamsyncd/teamsyncd.cpp +++ b/teamsyncd/teamsyncd.cpp @@ -7,6 +7,10 @@ #include "netlink.h" #include "teamsync.h" +#if defined(ASAN_ENABLED) +#include +#endif + using namespace std; using namespace swss; @@ -14,6 +18,9 @@ bool received_sigterm = false; void sig_handler(int signo) { +#if defined(ASAN_ENABLED) + __lsan_do_leak_check(); +#endif received_sigterm = true; return; }