Commit edde45f5ccc67fddd1d3d2972efe74b0a12e4178

Authored by Hu Chunming
1 parent 6dc4fd39

修复channelMap可能导致的崩溃

src/decoder/dvpp/DvppSourceManager.cpp
@@ -7,18 +7,19 @@ using namespace std; @@ -7,18 +7,19 @@ using namespace std;
7 7
8 DvppSourceManager::~DvppSourceManager() 8 DvppSourceManager::~DvppSourceManager()
9 { 9 {
10 - channelMap.clear(); 10 + m_channelMap.clear();
11 11
12 // aclFinalize(); 12 // aclFinalize();
13 } 13 }
14 14
15 int DvppSourceManager::getChannel(int devId){ 15 int DvppSourceManager::getChannel(int devId){
  16 + std::lock_guard<std::mutex> l(m_channelMap_mtx);
16 // channel 最大值暂定为32, 华为没有接口获取最大channel,只有文档说明 17 // channel 最大值暂定为32, 华为没有接口获取最大channel,只有文档说明
17 for(int iChannel = 0; iChannel < 32; iChannel++){ 18 for(int iChannel = 0; iChannel < 32; iChannel++){
18 string channelKey = "channel_" + to_string(devId) + "_" + to_string(iChannel) ; 19 string channelKey = "channel_" + to_string(devId) + "_" + to_string(iChannel) ;
19 - auto it = channelMap.find(channelKey);  
20 - if(it == channelMap.end()){  
21 - channelMap[channelKey] = iChannel; 20 + auto it = m_channelMap.find(channelKey);
  21 + if(it == m_channelMap.end()){
  22 + m_channelMap[channelKey] = iChannel;
22 return iChannel; 23 return iChannel;
23 } 24 }
24 } 25 }
@@ -26,9 +27,10 @@ int DvppSourceManager::getChannel(int devId){ @@ -26,9 +27,10 @@ int DvppSourceManager::getChannel(int devId){
26 } 27 }
27 28
28 void DvppSourceManager::releaseChannel(int devId, int iChannel){ 29 void DvppSourceManager::releaseChannel(int devId, int iChannel){
  30 + std::lock_guard<std::mutex> l(m_channelMap_mtx);
29 string channelKey = "channel_" + to_string(devId) + "_" + to_string(iChannel) ; 31 string channelKey = "channel_" + to_string(devId) + "_" + to_string(iChannel) ;
30 - auto it = channelMap.find(channelKey);  
31 - if(it != channelMap.end()){  
32 - channelMap.erase(channelKey); 32 + auto it = m_channelMap.find(channelKey);
  33 + if(it != m_channelMap.end()){
  34 + m_channelMap.erase(channelKey);
33 } 35 }
34 } 36 }
35 \ No newline at end of file 37 \ No newline at end of file
src/decoder/dvpp/DvppSourceManager.h
@@ -24,5 +24,6 @@ private: @@ -24,5 +24,6 @@ private:
24 ~DvppSourceManager(); 24 ~DvppSourceManager();
25 25
26 private: 26 private:
27 - map<string, int> channelMap; 27 + map<string, int> m_channelMap;
  28 + mutex m_channelMap_mtx;
28 }; 29 };
29 \ No newline at end of file 30 \ No newline at end of file