我已将一个用 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 对象。我在 StackOverflow、Google 等网站上搜索了与“互斥锁:资源繁忙”相关的任何内容,但一无所获。我的代码此时没有访问任何应用程序级别的互斥锁,因此我假设所引用的互斥锁是与 Boost 相关的。
有人可以告诉我该消息的基本含义,以及为什么抛出“资源繁忙”异常吗?Blackberry 10 上是否存在与异常相关的已知问题?
提前致谢!