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返回)。

+0

我可以假设它是posix行为,线程可能仍然运行,而libc是munmap()在共享库退出? – patraulea