アプリケーションで Boost.Spirit および Boost.Thread ライブラリを使用しているときにクラッシュが発生しました。これは、メイン スレッドからのプロセスの有効期間中に Spirit パーサーを使用した場合にのみ発生します。
クラッシュは終了時に発生し、Spirit パーサーによって割り当てられたスレッド固有のストレージのクリーンアップに関連しているようです。スレッド固有のメモリが既にアンロードされている DLL 内に割り当てられているため、DLL がアンロードされる順序が原因でクラッシュしている可能性があります。ただし、Boost.Thread DLL は、アプリケーション自体が終了するまでアンロードされません。
プロセス デタッチ通知を受け取ったときに、Spirit にスレッド固有のストレージ (たとえば、dll-main 内) を強制的に消去させる方法はありますか?
解決策/ヒントをいただければ幸いです。
PS!私のプラットフォームと設定:
- ビジュアル スタジオ 2005
- BOOST_ALL_DYN_LINK
- BOOST_SPIRIT_THREADSAFE