Мне нужна помощь с этим исключением, я реализую плагин NPAPI, чтобы иметь возможность использовать локальные сокеты из расширений браузера, для этого я использую инфраструктуру Firebreath.boost :: exception_detail :: clone_impl <boost :: exception_detail :: error_info_injector <boost :: thread_resource_error>>
Для сокета и подключения Я использую Boost asio с асинхронными вызовами и пулом потоков из 5 рабочих потоков. Также у меня есть крайний срок для каждого потока, чтобы реализовать тайм-аут передачи.
Мой расширение рабочего процесса с плагином как это:
- Открытое гнездо 1 (это начинает async_receive и срок async_wait)
- Запись в гнезде 1
Получить ответ 1
Открыть другую розетку 2
Wri т.е в гнезде 2
Написать сокет 1
Закрыть сокет 1 (socket.cancel(), deadline.cancel(), socket.shutdown(), розетка релиз).
Получить ответ 2
- Написать гнездо 2
- Закрыть гнездо 2
Как все кросс язык и асинхронной действительно трудно отлаживать, но все открытые, писать или близко называются из JavaScript и чтение из сокета 1, которое вызывает open 2, записывает 2, записывает 1 и закрывает 1 в этом порядке.
Может быть Evrything я говорю не имеет никакого отношения, как стек вызовов, когда исключение генерируется не показывает какой-либо из своих функций, и только показать, что он находится внутри malloc
, который вызывает _heap_alloc_dbg_impl
Как это обычно не удается в 2-й или 3-й полный цикл, и кажется, что это происходит между этапами 5 и 7.
Но, я думаю, что это должно быть связано с asio, поскольку все, что происходит с одним рабочим потоком, просто падает с исключением в первом цикле.
Я открыт для публикации более подробной информации, если вам это нужно.
Update 1:
Update 2:
Есть 10 нитей запускаемые с:
workPtr.reset(new boost::asio::io_service::work(io_service));
for (int i = 0; i < 10; ++i) {
m_threadGroup.create_thread(boost::bind(&boost::asio::io_service::run, &io_service));
}
11-_threadstartex я не знаю кто запустил его
В другом потоке (не том, который VS утверждает как вызывающий крах), происходит процесс join_all()
, потому что мой класс уничтожается, но я думаю, что этого не должно быть, поэтому, возможно, этот сбой произошел из-за другого исключения и Firebreath чтобы закрыть все, когда он падает.
Где исключено исключение? Поместите некоторый код. –
Сколько рабочих потоков есть? Похоже, что нити, которые вы начинаете, никогда не доходят до завершения. –
Добавлен образ с кодом, стек вызовов и потоки. Я не могу увидеть исключение, я просто получаю сообщение об исключении с параметрами, чтобы сломать или продолжить, и когда я сломаю это состояние, обратите внимание, что в стеке вызовов нет кода с моим кодом (мои классы - SocketInfo , SocketsApi, Base64), в другом потоке ясно, что объект npapi был уничтожен, и он выполняет {m_threadGroup.join_all();}, но он не должен быть уничтожен в этой точке, поэтому, возможно, VS ломается за другим исключение вызвало плагин для начала разрушения, я понятия не имею, как работает FB – frisco