使用libpcap庫的多執行緒問題

2021-07-09 06:10:50 字數 961 閱讀 1119

最近在系統裡遇到乙個程式,總會莫名其妙的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. */

靜態變數啊。。。多執行緒的使用肯定是有問題的

zhtread c 多執行緒庫的使用

很早就買了c 程式設計思想第二卷這本書 可惜最後一章一直沒有看。於是找個時間看看多執行緒也比較好啊 使用編譯好的zthread庫 自己先寫個簡短的例子 如下 include include pragma comment lib,zthread z.lib class thread public zt...

Sqlite記憶體資料庫在多執行緒下的使用問題

windows平台,多執行緒伺服器,我想建立乙個全域性記憶體資料庫,然後在其他執行緒裡面使用這個庫,包括讀寫,弄的時候發現有幾個問題 1 方法一 程式啟動時建立乙個全域性sqlite連線,各個執行緒都可以操作這個例項。但經測試發現,這麼做,如果不做同步,讀寫都會衝突。也就是說,無論讀寫,只能有乙個執...

Sqlite記憶體資料庫在多執行緒下的使用問題

sqlite 記憶體資料庫的attach 我已經往記憶體資料庫a插入了10w條資料,我現在想把a匯入乙個物理檔案b 具有相同表結構 是不是應該用attach指令?有沒有高人詳細指點一下?sqlite3 open memory db ret sqlite3 exec db,create table n...