Re: [Cppcms-users] Segmentaion fault occurs to booster::aio::io_service running in booster::thread
Brought to you by:
artyom-beilis
From: Artyom B. <art...@ya...> - 2016-05-09 10:39:10
|
1st why are you using your own signal handler instead of one used by CppCMS?On segfault - can you show the backtrace of the stack from gdb when it happens. Artyom From: CN <cn...@fa...> To: cpp...@li... Sent: Sunday, May 8, 2016 5:04 PM Subject: [Cppcms-users] Segmentaion fault occurs to booster::aio::io_service running in booster::thread File "t.cpp": #include <booster/aio/io_service.h> #include <cppcms/service.h> #include <boost/bind.hpp> #include <booster/shared_ptr.h> #include <booster/log.h> #include <signal.h> booster::shared_ptr<cppcms::service> this_cppcms_service; static int caught_signal=-1; void signal_handler(int signal_number) { BOOSTER_DEBUG("begin handler"); caught_signal=signal_number; this_cppcms_service->shutdown(); BOOSTER_DEBUG("end handler"); } class my_class { private: booster::aio::io_service io_service; public: void start(){ io_service.run(); } void stop(){ io_service.stop(); } }; int main(int argc,char ** argv) { while(true){ try{ this_cppcms_service.reset(new cppcms::service(argc,argv)); //Install signals catchers. struct sigaction actions; memset(&actions,0,sizeof(actions)); actions.sa_handler=signal_handler; int result; if( (result=sigaction(SIGTERM,&actions,NULL)) != 0 || (result=sigaction(SIGHUP,&actions,NULL)) != 0 ){ BOOSTER_ERROR("") << "sigaction() failed"; exit(EXIT_FAILURE); } my_class mc; booster::thread mc_thread(boost::bind(&my_class::start,&mc)); BOOSTER_DEBUG("==1=="); this_cppcms_service->run(); BOOSTER_DEBUG("==2=="); mc.stop(); mc_thread.join(); BOOSTER_DEBUG("==3=="); if(caught_signal == SIGTERM) return 0; BOOSTER_DEBUG("==4=="); //SIGHUP to reload configurations } catch(std::exception const &e){ BOOSTER_ERROR("") << e.what(); return 1; } } return 0; } ---------- File "t.js": { "service" : { "api" : "fastcgi", "socket" : "/tmp/t.sock", "disable_global_exit_handling":true }, "daemon":{ "enable":true, "lock":"/tmp/t.pid" }, "logging" : { "level" : "debug", "stderr" : false, "syslog" : { "enable":true, "id" : "t" } } } -------- Commands issued: cd /tmp g++ -lbooster -lcppcms -lboost_system t.cpp ./a.out -c t.js kill -TERM `cat t.pid` -------- File "/var/log/syslog": May 8 21:36:13 host t: ==1==: (t.cpp:51) May 8 21:36:36 host t: begin handler: (t.cpp:12) May 8 21:36:36 host t: end handler: (t.cpp:15) May 8 21:36:36 host t: ==2==: (t.cpp:53) May 8 21:36:36 host kernel: a.out[5146]: segfault at b5b5dba8 ip b715205e sp bfad0620 error 4 in libpthread-2.19.so[b714a000+18000] With this simple code, I get segfault at "mc.stop(); mc_thread.join();" after issuing command "kill -TERM <pid>". Would someone please enlighten me why? Best regards, CN -- http://www.fastmail.com - Accessible with your email software or over the web ------------------------------------------------------------------------------ Find and fix application performance issues faster with Applications Manager Applications Manager provides deep performance insights into multiple tiers of your business applications. It resolves application problems quickly and reduces your MTTR. Get your free trial! https://ad.doubleclick.net/ddm/clk/302982198;130105516;z _______________________________________________ Cppcms-users mailing list Cpp...@li... https://lists.sourceforge.net/lists/listinfo/cppcms-users |