Проблема:
Вызовите/инициализируйте код Poco из библиотеки C, используя загрузчик (сторонняя программа C, наш код написан на C++).
- Программа загружает нашу библиотеку, наша библиотека инициализирует Poco::Logger и использует AsyncChannel + FileChannel в логгере.
- Форк этого процесса.
- Запустите несколько потоков в дочернем процессе.
- попробуйте выйти из дочернего процесса, присоединившись к потокам.
- Деструктор AsyncChannel блокируется функцией close(), по существу опрашивая Queue и переходя в спящий режим.
- В _queue всегда есть 1 элемент, когда вызывается деструктор для AsyncChannel, и я предполагаю, что это связано с тем, как работает и разветвляется родительский процесс.
Теперь вопрос: проблема с gcc в том, что разветвление процесса не вызывает конструкторы, а просто дублирует память? Я попытался вызвать _queue.clear() внутри AsyncChannel::AsyncChannel(), но безрезультатно...
Кто-нибудь видел эту проблему раньше? любое предлагаемое решение?