Poco AsyncChannel не завершается при выходе из разветвленного процесса

Проблема:

Вызовите/инициализируйте код Poco из библиотеки C, используя загрузчик (сторонняя программа C, наш код написан на C++).

  1. Программа загружает нашу библиотеку, наша библиотека инициализирует Poco::Logger и использует AsyncChannel + FileChannel в логгере.
  2. Форк этого процесса.
  3. Запустите несколько потоков в дочернем процессе.
  4. попробуйте выйти из дочернего процесса, присоединившись к потокам.
  5. Деструктор AsyncChannel блокируется функцией close(), по существу опрашивая Queue и переходя в спящий режим.
  6. В _queue всегда есть 1 элемент, когда вызывается деструктор для AsyncChannel, и я предполагаю, что это связано с тем, как работает и разветвляется родительский процесс.

Теперь вопрос: проблема с gcc в том, что разветвление процесса не вызывает конструкторы, а просто дублирует память? Я попытался вызвать _queue.clear() внутри AsyncChannel::AsyncChannel(), но безрезультатно...

Кто-нибудь видел эту проблему раньше? любое предлагаемое решение?


person ashish behl    schedule 18.11.2014    source источник