Poco AsyncChannel不会在分叉进程退出时退出

时间:2014-11-18 15:33:59

标签: c++ fork poco raii dynamic-loading

问题:

使用loader(第三方C程序,我们的代码使用c ++)从C库内部调用/初始化Poco代码。

  1. 程序加载我们的库,我们的lib初始化Poco :: Logger并在记录器中使用AsyncChannel + FileChannel。
  2. 从这个过程中分叉。
  3. 在子进程中运行一些线程。
  4. 尝试退出子进程,加入线程。
  5. AsyncChannel的析构函数阻塞close(),基本上是轮询队列并休眠。
  6. 当调用AsyncChannel的析构函数时,_queue总是有1个元素,我认为这是由父进程运行和分叉的方式造成的。
  7. 现在的问题是:这是gcc的问题,分叉进程不会调用构造函数而只是重复内存吗? 我试过在AsyncChannel :: AsyncChannel()中调用_queue.clear()但没有结果......

    之前有没有人见过这个问题?任何建议的方案?

1 个答案:

答案 0 :(得分:1)

回复:

http://pocoproject.org/forum/viewtopic.php?f=10&t=6378

总结:在fork之后而不是之前创建线程。 Poco :: Util :: Timer和其他类也有同样的问题。