使用libpcap库的多线程问题

最近在系统里遇到一个程序,总会莫名其妙的segmentation fault,而且每次出现的问题都不相同。考虑到有多线程,可能会跟这个有关系。但是一直没有找出到底哪里出的问题,这个程序使用libpcap的一些function来进行抓包分析,每个网卡对应一个线程。

function里面没有显式的全局变量。


然后就想到,通过function back trace来看看。找到

 ======= Backtrace: =========
/lib64/libc.so.6[0x3e4ca76166]
/lib64/libc.so.6[0x3e4ca78c93]
/lib64/libc.so.6[0x3e4ca7bb60]
/lib64/libc.so.6(realloc+0xe5)[0x3e4ca7bdd5]
./dnsaudit[0x41a413]
./dnsaudit[0x41a639]
./dnsaudit[0x41a770]
./dnsaudit[0x41a7f9]
./dnsaudit[0x41a879]
./dnsaudit[0x40b218]
./dnsaudit[0x407a58]
/lib64/libpthread.so.0[0x3e4d2079d1]
/lib64/libc.so.6(clone+0x6d)[0x3e4cae8b6d]


通过objdump -S dnsaudit >tmp


找到出事的问题点,果然是在库函数里面,pcap_ensure_buffer_stack


看了一下出事的行:if (!(yy_buffer_stack)) {


这个yy_buffer_stack 

static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */

静态变量啊。。。多线程的使用肯定是有问题的


解决方案下一篇再写

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值