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,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 |