Commit edde45f5ccc67fddd1d3d2972efe74b0a12e4178

Authored by Hu Chunming
1 parent 6dc4fd39

修复channelMap可能导致的崩溃

src/decoder/dvpp/DvppSourceManager.cpp
... ... @@ -7,18 +7,19 @@ using namespace std;
7 7  
8 8 DvppSourceManager::~DvppSourceManager()
9 9 {
10   - channelMap.clear();
  10 + m_channelMap.clear();
11 11  
12 12 // aclFinalize();
13 13 }
14 14  
15 15 int DvppSourceManager::getChannel(int devId){
  16 + std::lock_guard<std::mutex> l(m_channelMap_mtx);
16 17 // channel 最大值暂定为32, 华为没有接口获取最大channel,只有文档说明
17 18 for(int iChannel = 0; iChannel < 32; iChannel++){
18 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 23 return iChannel;
23 24 }
24 25 }
... ... @@ -26,9 +27,10 @@ int DvppSourceManager::getChannel(int devId){
26 27 }
27 28  
28 29 void DvppSourceManager::releaseChannel(int devId, int iChannel){
  30 + std::lock_guard<std::mutex> l(m_channelMap_mtx);
29 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 37 \ No newline at end of file
... ...
src/decoder/dvpp/DvppSourceManager.h
... ... @@ -24,5 +24,6 @@ private:
24 24 ~DvppSourceManager();
25 25  
26 26 private:
27   - map<string, int> channelMap;
  27 + map<string, int> m_channelMap;
  28 + mutex m_channelMap_mtx;
28 29 };
29 30 \ No newline at end of file
... ...