boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::thread_resource_error> >

boost-asio, boost-thread, c++, firebreath, visual-c++

Solution

I found the errors by continuing to inspect the other threads. I found that my principal class that Firebreath was invoking was in the process of being destroyed. Inspecting a little more I found that it was totally my fault I have a class for storing the sockets information that needed to use a function in the principal class (I didn't like it but it was the only way I found to use it) so I added a `shared_ptr` to the principal class. So if it after destroying on of those `SocketInfo` objects as there were no others the ptr ref count reached 0 and the principal class was being destroyed.

What is fun is that sockets usually close normally after being used so I see no reason why this was not triggered when there were not sockets opened and only happened when 2 sockets where opened and closed in a row.

Anyway I also had a `shared_from_this` error with the deadline handler but that seemed unrelated.

And now it seems it is working as expected with any number of threads.

Problem

I need some help with this exception, I am implementing a NPAPI plugin to be able to use local sockets from browser extensions, to do that I am using Firebreath framework. For socket and connectivity I am using Boost asio with async calls and a thread pool of 5 worker threads. Also I have a deadline per thread to implement a transmission timeout. My extension workflow with the plugin is as this: - Open socket 1(this starts a async_receive and the deadline async_wait) - Write in the socket 1 Get response 1 Open another socket 2 Write in the socket 2 Write socket 1 Close socket 1 (socket.cancel(), deadline.cancel(), socket.shutdown(), socket release). Get response 2 - Write socket 2 - Close socket 2 As everything is cross language and async is really hard to debug but all open, write or close are called from javascript and the read from socket 1 that calls open 2, write 2, write 1 and close 1 in that order. Maybe evrything I am telling is unrelated as the call stack when the exception is thrown does not show any of my functions and only show that it is inside a `malloc` that calls `_heap_alloc_dbg_impl` As it is it usually fails in the 2nd or 3rd full cycle and it seems that happens between steps 5 and 7. But, I think that it must be asio related as doing everything with a single worker thread just crashes with the exception on the first cycle. I am open to publish more information code if you need it. Update 1: Update 2: There are 10 threads are launched with: ``` 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) ); } ``` The 11th _threadstartex I don't know who launched it On another thread (not the one that VS claims as causing the crash) there is a `join_all()` in process because my class is being destroyed but I think it shouldn't, so maybe this crash is due to another exception and the Firebreath process to close everything when it crashes.

Original source