我有一個線程奇怪的問題。如果我啓動我的程序沒有參數或--help
選項,它將立即退出。退出()調用pthread_mutex_lock()
程序在啓動時加載網絡檢查程序線程。當需要退出或禁用某些在線功能時,它只會終止網絡檢查程序線程。這似乎做得正確......直到我撥打exit()
。
在gdb上,我可以看到網絡檢查程序成功關閉 - 但出於某些模糊原因,主程序調用exit()
時,pthread_mutex_lock()
也被調用。
這裏的回溯:
(gdb) bt
#0 0x00007ffff711e804 in __lll_lock_wait() from /lib64/libpthread.so.0
#1 0x00007ffff711a0e0 in _L_lock_533() from /lib64/libpthread.so.0
#2 0x00007ffff7119f79 in pthread_mutex_lock() from /lib64/libpthread.so.0
#3 0x00007ffff7dea3cd in _dl_fini() from /lib64/ld-linux-x86-64.so.2
#4 0x00007ffff6dbe6a1 in __run_exit_handlers() from /lib64/libc.so.6
#5 0x00007ffff6dbe725 in exit() from /lib64/libc.so.6
#6 0x0000000000413ec4 in option_handler (argc=1, argv=0x7fffffffdcb8) at autocrack.c:302
#7 0x00000000004135a7 in main (argc=1, argv=0x7fffffffdcb8) at autocrack.c:34
當我打電話exit()
從我main
函數內部此不發生。這隻發生在我撥打exit()
from inside the option handler時。
我使用grep -rin pthread_mutex_ .
來查看我的程序中使用了哪些鎖:程序不應該達到這些點。
完整的源代碼可以在https://github.com/tux-mind/autocrack
這是怎麼回事找到?
+1:我想說很可能是內存損壞發生在庫的pthread_mutex內存上。它可能認爲互斥鎖已鎖定,正在等待它被解鎖,這當然不會發生。 –
對於遲到的回覆感到抱歉, valgrind無用,因爲它會隨着僵局而停止。 如果我按Ctrl + C我的程序趕上這個和自殺......但valgrind仍然凍結。 非常奇怪的是,當我的程序還沒有死時(等待SIGINT)我不能在ps --ppid'pidof valgrind' -L中選擇它,爲什麼? –
在config.log我發現這個選項是給定的配置: --enable -__ cxa_atexit 但它應該只在c + +,對不對? –