uClibc 共享库在 exit() 期间卸载
uClibc shared libs unloading during exit()
我正在使用在初始化期间创建工作线程的共享库。该应用程序与 uClibc 链接。当它从 main() 中 returns 时,它在 __pthread_cond_wait()
中崩溃或从工作线程中崩溃,共享库没有正确地从其 cleanup() 代码中停止。崩溃时的main()线程栈是:
#0 _dl_munmap from uClibc.so
#1 _dl_fini
#2 __GI_exit
#3 __uClibc_main
由于我没有共享库的源代码,所以我无法修复工作程序清理代码,但我的问题是:
为什么一旦 uClibc 开始卸载共享库,线程仍然 运行(崩溃)?我假设它正在从上面的 _dl_munmap
堆栈条目中卸载它们。有没有办法确保当 main() 退出时所有线程都是 paused/stopped?
Why are threads still running
因为你(或者你link反对的共享库)离开了他们运行ning。
Is there a way to make sure all threads are paused/stopped when main() exits
是:您需要安排线程终止。如果无法访问共享库源代码,您就无法真正做到这一点;您唯一的其他选择是调用 _exit
(不应该 运行 任何清理)而不是 exit
(或者不是从 main
返回)。
我正在使用在初始化期间创建工作线程的共享库。该应用程序与 uClibc 链接。当它从 main() 中 returns 时,它在 __pthread_cond_wait()
中崩溃或从工作线程中崩溃,共享库没有正确地从其 cleanup() 代码中停止。崩溃时的main()线程栈是:
#0 _dl_munmap from uClibc.so
#1 _dl_fini
#2 __GI_exit
#3 __uClibc_main
由于我没有共享库的源代码,所以我无法修复工作程序清理代码,但我的问题是:
为什么一旦 uClibc 开始卸载共享库,线程仍然 运行(崩溃)?我假设它正在从上面的 _dl_munmap
堆栈条目中卸载它们。有没有办法确保当 main() 退出时所有线程都是 paused/stopped?
Why are threads still running
因为你(或者你link反对的共享库)离开了他们运行ning。
Is there a way to make sure all threads are paused/stopped when main() exits
是:您需要安排线程终止。如果无法访问共享库源代码,您就无法真正做到这一点;您唯一的其他选择是调用 _exit
(不应该 运行 任何清理)而不是 exit
(或者不是从 main
返回)。