Open yondu202 opened 3 years ago
写了个测试代码,在 2013上没有复现 这个问题。 static void runSingleTask() { ClientConfiguration conf; auto client = new OssClient("endpoint", "accessKeyId", "accessKeySecret", conf); while (true) { auto request = InitiateMultipartUploadRequest("test-bucket-name", "test.mp4"); auto outcome = client->InitiateMultipartUpload(request); if (outcome.isSuccess()) { client->AbortMultipartUpload(AbortMultipartUploadRequest("test-bucket", "test.mp4",outcome.result().UploadId())); } //std::this_thread::sleep_for(std::chrono::microseconds(100)); } }
{
...
std::vector<std::future
for (int i = 0; i < 10; i++) {
taskVec[i].get();
}
...
}
能否在你的环境上帮忙做个测试: 把 aliyun-oss-cpp-sdk/sdk/src/utils/Utils.cc::LookupMimeType 里的 mimeType 移到函数外定义?
类似如下: const static std::map<std::string, std::string> mimeType = { ... }; const std::string& AlibabaCloud::OSS::LookupMimeType(const std::string &name) { const static std::string defaultType("application/octet-stream"); ... }
SDK 外部使用多线程上传多个 mp4 文件,有一定概率崩溃,崩溃在 std::map find 中
1、SDK 版本 1.9.0; 2、VS2013 3、每个线程一个 OssClient 4、调用栈信息 STACK_TEXT:,std::allocator >,std::basic_string<char,std::char_traits,std::allocator >,std::less<std::basic_string<char,std::char_traits,std::allocator > >,std::allocator<std::pair<std::basic_string<char,std::char_traits,std::allocator > const ,std::basic_string<char,std::char_traits,std::allocator > > >,0> >::_Lbound+0xe
1249d0d4 5fd6b4a3 1249d154 1249e4a4 1444c519 alibabacloud_oss_cpp_sdk!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits,std::allocator >,std::basic_string<char,std::char_traits,std::allocator >,std::less<std::basic_string<char,std::char_traits,std::allocator > >,std::allocator<std::pair<std::basic_string<char,std::char_traits,std::allocator > const ,std::basic_string<char,std::char_traits,std::allocator > > >,0> >::find+0x15
1249e4cc 5fd24fe6 1249f928 1444c489 1c30b318 alibabacloud_oss_cpp_sdk!AlibabaCloud::OSS::LookupMimeType+0x11b3
1249e55c 5fcc2d93 1249e584 1444c401 00000000 alibabacloud_oss_cpp_sdk!AlibabaCloud::OSS::InitiateMultipartUploadRequest::specialHeaders+0xd6
1249e5d4 5fcb9dee 1249e5e4 1444c6c1 1444c675 alibabacloud_oss_cpp_sdk!AlibabaCloud::OSS::OssRequest::Headers+0x43
1249e714 5fcc6091 1249e750 196166c0 1249f8b0 alibabacloud_oss_cpp_sdk!AlibabaCloud::OSS::OssClientImpl::buildHttpRequest+0x11e
1249e820 5fcc5be8 1249e8a4 196166c0 1249f8b0 alibabacloud_oss_cpp_sdk!AlibabaCloud::OSS::Client::AttemptOnceRequest+0x171
1249e8fc 5fcba99d 1249eafc 196166c0 1249f8b0 alibabacloud_oss_cpp_sdk!AlibabaCloud::OSS::Client::AttemptRequest+0x68
1249eb54 5fcb4353 1249ee34 1249f8b0 00000002 alibabacloud_oss_cpp_sdk!AlibabaCloud::OSS::OssClientImpl::MakeRequest+0x28d
1249ef08 5fc61ac9 1249f480 1249f8b0 196165a0 alibabacloud_oss_cpp_sdk!AlibabaCloud::OSS::OssClientImpl::InitiateMultipartUpload+0x53
1249ef24 0054de32 1249f480 1249f8b0 f1074ad3 alibabacloud_oss_cpp_sdk!AlibabaCloud::OSS::OssClient::InitiateMultipartUpload+0x29
1249d094 5fd799b5 1249e4a4 1249e4a4 1249e4a4 alibabacloud_oss_cpp_sdk!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits
FAULTING_SOURCE_CODE:
2085: } 2086: 2087: _Nodeptr _Lbound(const key_type& _Keyval) const 2088: { // find leftmost node not less than _Keyval 2089: _Nodeptr _Pnode = _Root(); 《======= 此处为崩溃位置 2090: _Nodeptr _Wherenode = this->_Myhead; // end() if search fails 2091: 2092: while (!this->_Isnil(_Pnode)) 2093: if (_DEBUG_LT_PRED(this->_Getcomp(), this->_Key(_Pnode), _Keyval)) 2094: _Pnode = this->_Right(_Pnode); // descend right subtree