2

私は、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 の既知の問題はありますか?

前もって感謝します!

4

1 に答える 1