我需要一些幫助來解決這個異常,我正在實現一個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 TE在插座2
寫插座1
關閉插座1 (socket.cancel(),deadline.cancel(),socket.shutdown(),插座 釋放)。
獲取響應2
- 寫插座2
- 關閉插座2
由於一切是跨語言和異步真的很難調試,但全部打開,寫入或接近被從JavaScript叫並從套接字1中讀取,按照該順序調用打開2,寫入2,寫入1並關閉1。
也許evrything我告訴無關當發生異常時不顯示我的任何功能,只是表明它是一個malloc
調用_heap_alloc_dbg_impl
由於這是它通常無法在內部調用堆棧第二或第三個完整週期,似乎發生在第5步和第7步之間。
但是,我認爲它必須是asio相關的,因爲使用單個工作線程執行所有操作只會在第一個週期出現異常。
我打開發布更多的信息代碼,如果你需要它。
更新1:
更新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進程在崩潰時關閉所有內容。
拋出異常在哪裏?發佈一些代碼。 – 2013-03-21 17:44:42
有多少個工作線程?它看起來像你開始的線程永遠不會完成。 – 2013-03-21 18:07:16
添加了帶有代碼,調用堆棧和線程的圖像。我無法看到異常,我只是得到有關異常的消息,並打破或繼續選項,當我斷開狀態時,請注意,調用堆棧中沒有框架(我的類是SocketInfo ,SocketsApi,Base64),在另一個線程中,很明顯npapi對象已經被銷燬,並且它正在執行{m_threadGroup.join_all();}但它不應該在那個時候被銷燬,所以VS可能會破壞另一個異常導致插件開始銷燬,我不知道FB是如何工作的 – frisco 2013-03-21 18:15:40