初期化中にワーカースレッドを作成する共有ライブラリを使用しています。このアプリはuClibcにリンクされています。 main()から復帰すると、__pthread_cond_wait()
などのクラッシュで、共有スレッドがクリーンアップ()コードから正しく停止しないワーカースレッドからクラッシュします。メイン()スレッドスタックには、クラッシュしたときです:exit()中にuClibc共有ライブラリがアンロードされる
#0 _dl_munmap from uClibc.so
#1 _dl_fini
#2 __GI_exit
#3 __uClibc_main
私は労働者のクリーンアップコードを修正することはできません共有ライブラリのソースを持っていないが、私の質問があるので:
されている理由uClibcが共有ライブラリのアンロードを開始しても、スレッドはまだ動作しています(クラッシュします)?私はそれが上記の_dl_munmap
スタックエントリからそれらをアンロードしていると仮定します。 main()が終了したときにすべてのスレッドが一時停止/停止されていることを確認する方法はありますか?
libcが終了時に共有ライブラリをmunmap()している間に、スレッドがまだ実行されている可能性があるというposixの動作があるとしますか? – patraulea