Atlas源码剖析(一)

信号设置

在设置各种配置参数之前,如果支持sigaction,则使用sigaction来设置SIGSEGV信号,指定处理函数调用g_on_error_stack_trace获取相关的堆栈信息后,调用abort退出程序。此信号在程序结束前进行清除,修复默认处理方式。

#ifdef HAVE_SIGACTION
        /* register the sigsegv interceptor */

        memset(&sigsegv_sa, 0, sizeof(sigsegv_sa));
        sigsegv_sa.sa_handler = sigsegv_handler;
        sigemptyset(&sigsegv_sa.sa_mask);

        if (frontend->invoke_dbg_on_crash && !(RUNNING_ON_VALGRIND)) {
                sigaction(SIGSEGV, &sigsegv_sa, NULL);
        }   
#endif

static void sigsegv_handler(int G_GNUC_UNUSED signum) {
        g_on_error_stack_trace(g_get_prgname());

        abort(); /* trigger a SIGABRT instead of just exiting */
}


同时,将SIGPIPE信号的处理方式设置为忽略。这里增加一些对SIGPIPE信号的介绍:TCP是全双工的信道,可以看作两条单工信道,,TCP连接两端的两个端点各负责一条。当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值