繁体   English   中英

在fork之后删除condition_variable时提升崩溃

[英]boost crash when deleting condition_variable after fork

我有一个共享库,可以通过我的应用程序加载。 加载库时,它将创建boost :: condition_variable的实例。 并将其删除(使用at_exit())。

我的应用程序调用fork()。 并且似乎在子进程结束时,该库尝试删除condition_variable,并在断言时失败。

我认为这与派生有关,因为只有子进程(仅在父进程结束后才终止)才导致崩溃。

有谁知道为什么会这样吗? 有谁知道如何解决它(没有尝试/捕获)?

碰撞:

Missing separate debuginfos, use: debuginfo-install boost-filesystem-1.41.0-11.el6_1.2.x86_64 boost-system-1.41.0-11.el6_1.2.x86_64 glibc-2.12-1.47.el6.x86_64 libgcc-4.4.6-3.el6.x86_64 libstdc++-4.4.6-3.el6.x86_64
(gdb) bt
#0  0x0000003eca232885 in raise () from /lib64/libc.so.6
#1  0x0000003eca234065 in abort () from /lib64/libc.so.6
#2  0x0000003eca22b9fe in __assert_fail_base () from /lib64/libc.so.6
#3  0x0000003eca22bac0 in __assert_fail () from /lib64/libc.so.6
#4  0x00007f64bab101f6 in ?? () at /usr/include/boost/thread/pthread/condition_variable_fwd.hpp:86

发生这种情况似乎是因为您使用fork()而不是exec(),这使您留下两个进程,每个进程都注册了atexit处理程序。 为了克服这个问题,可以考虑简单地添加一个全局布尔(每个进程一个),在执行任何操作之前,它将由atexit处理程序进行检查。 然后,只需在您的子进程中设置该布尔值,使其处理程序就什么也不做。

有关更多信息,请参阅: 我可以撤消或删除atexit命令吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM