【发布时间】:2014-11-18 15:33:58
【问题描述】:
问题:
从 C 库中调用/初始化 Poco 代码,使用加载器(第三方 C 程序,我们的代码是 c++)。
- 程序加载我们的库,我们的库初始化 Poco::Logger 并在记录器中使用 AsyncChannel + FileChannel。
- 从此进程分叉。
- 在子进程中运行一些线程。
- 尝试退出子进程,加入线程。
- AsyncChannel 的析构函数在 close() 上阻塞,本质上是轮询队列和休眠。
- 当调用 AsyncChannel 的析构函数时,_queue 总是有 1 个元素,我认为这是由于父进程运行和分叉的方式造成的。
现在的问题是:forking 进程不调用构造函数而只是复制内存,这是否是 gcc 的问题? 我尝试在 AsyncChannel::AsyncChannel() 中调用 _queue.clear() 但没有结果...
有没有人见过这个问题?任何建议的解决方案?
【问题讨论】:
标签: c++ fork poco raii dynamic-loading