UCLIBC在退出期间共享LIB卸载()



我正在使用一个共享库,该库在初始化过程中创建工作人员线程。该应用与UCLIBC链接。当它从main()返回时,它会在__pthread_cond_wait()中崩溃或从工作线程类似,即共享LIB无法正确停止其清理()代码。崩溃时的主()线程堆栈是:

#0 _dl_munmap from uClibc.so
#1 _dl_fini 
#2 __GI_exit 
#3 __uClibc_main

由于我没有共享库的来源,所以我无法修复工作者的清理代码,但是我的问题是:

一旦UCLIBC开始卸下共享libs,为什么线程仍在运行(崩溃)?我认为它正在从上面的_dl_munmap堆栈条目中卸载它们。有没有办法确保当main()退出时暂停/停止所有线程?

为什么线程仍在运行

因为 you (或您链接的共享库)使它们运行。

有没有办法确保当main()退出时暂停/停止所有线程

是:需要安排线程终止。如果不访问共享库来源,您将无法真正这样做;您唯一的选择是调用_exit(不应进行任何清理)而不是exit(或者不是从main返回)。

最新更新