uClibc在exit()期间共享libs卸载

时间:2016-12-01 20:16:32

标签: linux multithreading shared-libraries libc uclibc

我正在使用一个在初始化期间创建工作线程的共享库。该应用程序与uClibc链接。当它从main()返回时,它在__pthread_cond_wait()或类似的工作线程中崩溃,共享库没有从其cleanup()代码中正确停止。崩溃时的main()线程堆栈是:

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

由于我没有共享库的源代码,我无法修复worker清理代码,但我的问题是:

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

1 个答案:

答案 0 :(得分:1)

  

为什么线程仍在运行

因为(或你链接的共享库)让它们继续运行。

  

有没有办法确保当main()退出

时所有线程都被暂停/停止

是:需要安排线程终止。无法访问共享库源,您无法真正做到这一点;您唯一的另一种选择是致电_exit(不应该进行任何清理)而不是exit(或者不是从main返回)。