Commit edde45f5ccc67fddd1d3d2972efe74b0a12e4178
1 parent
6dc4fd39
修复channelMap可能导致的崩溃
Showing
2 changed files
with
11 additions
and
8 deletions
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 | ... | ... |