[Cppcms-users] Segmentaion fault occurs to booster::aio::io_service running in booster::thread
Brought to you by:
artyom-beilis
|
From: CN <cn...@fa...> - 2016-05-08 14:04:36
|
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
|