私は、C++ と Boost で書かれた長く機能する安定したライブラリを Blackberry 10 に移植しました。このライブラリは、デバイス間でファイルを転送します。ライブラリは適切にコンパイルおよびリンクされ、問題なく動作します。ただし、1、2、または 3 個のファイルが転送された後、Blackberry 10 デバイスで常にスローされた例外に遭遇します。ソース コードで例外を boost::system::system_error としてキャッチすると、例外 16 であり、「mutex: Resource busy」というテキストが表示されます。
例外が発生するソース コードは次のとおりです。
try
{
. . .
// Find DtpFunctionData for the operation ID, use it to invoke handling function
std::map<int, FunctionData>::iterator iter = _vecFunctionData.find (operationId);
if (iter == _vecDtpClientFunctionData.end ())
return EC_GENERAL_FAILURE;
HANDLINGFUNC_1 handlingFunc = (*iter).second._clientHandlingFunc;
POSTOPFUNC_1 postOpFunc = (*iter).second._clientPostOpFunc;
bool callPostOpOnSuccess = (*iter).second._callPostOpOnSuccess;
// Open a socket opposite the remote peer's TcpPortListener
/* Start: ----- EXCEPTION 16: "mutex: Resource busy" ----- */
boost::asio::io_service io_service;
/* End: ----- EXCEPTION 16: "mutex: Resource busy" ----- */
boost::asio::ip::tcp::socket socket (io_service);
. . .
}
catch (boost::system::system_error& err)
{
LOGLINE (("error", "Boost exception (%d / \"%s\") caught in HandleQueueOperation", err.code ().value(), err.what()));
return EC_EXCEPTION_CAUGHT;
}
トレース ログの行は次のとおりです。
18:37:04 ( 149077264) [error] Boost exception (16 / "mutex: Resource busy") caught in HandleQueueOperation
例外は、上記の「開始」コメントと「終了」コメントの間のどこかでスローされます。ここでは、boost::asio::io_service オブジェクトが定義されています。「mutex: Resource busy」に関連するものを StackOverflow や Google などで検索しましたが、何も見つかりませんでした。私のコードはこの時点でアプリ レベルのミューテックスにアクセスしていないため、参照されているミューテックスは Boost 関連のものであると想定しています。
メッセージの基本的な意味と、「リソースがビジー」の例外がスローされる理由を教えてもらえますか? 例外に関連する Blackberry 10 の既知の問題はありますか?
前もって感謝します!