uClibc在退出时卸载共享库()
问题描述:
我正在使用共享库在初始化期间创建工作线程。该应用程序与uClibc链接。当它从main()返回时,它在__pthread_cond_wait()
或类似的工作线程中崩溃,共享库无法从其cleanup()代码正确停止。当它崩溃在main()线程堆栈:uClibc在退出时卸载共享库()
#0 _dl_munmap from uClibc.so
#1 _dl_fini
#2 __GI_exit
#3 __uClibc_main
由于我没有源的共享库,我不能修复工人清理代码,但我的问题是:
为什么线程仍然运行(崩溃)一旦uClibc开始卸载共享库?我假设它从上面的_dl_munmap
堆栈条目中卸载它们。有没有办法确保当main()退出时所有线程都被暂停/停止?
答
为什么线程仍在运行
因为你(或您对链接的共享库)离开他们运行。
有没有一种办法,以确保所有线程暂停/停止时main()退出
是:你需要线程安排终止。如果不能访问共享库源代码,那么你不能这么做;你唯一的选择是拨打_exit
(不应该运行任何清理)而不是exit
(或不是从main
返回)。
我可以假设它是posix行为,线程可能仍然运行,而libc是munmap()在共享库退出? – patraulea