使用libpcap库的多线程问题

来源:互联网 发布:everaver renamer mac 编辑:程序博客网 时间:2024/06/01 09:41

最近在系统里遇到一个程序,总会莫名其妙的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. */

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


解决方案下一篇再写

0 0
原创粉丝点击