スレッドに奇妙な問題があります。引数なしまたは--help
オプション付きでプログラムを開始すると、すぐに終了します。
プログラムは、開始時にネットワーク チェッカー スレッドをロードします。一部のオンライン機能を終了または無効にするときは、単にネットワーク チェッカー スレッドを終了します。これは正しく行われているようです...私が呼び出すまで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()
私grep -rin pthread_mutex_ .
は自分のプログラムで他のどこでロックが使用されているかを見ていました: プログラムは決してこれらのポイントに到達してはいけません.
完全なソース コードは、https://github.com/tux-mind/autocrackにあります。
どうしたの?