Commit 100af97d by xiongziliang

修复死锁问题:#486

parent 07ef4172
...@@ -72,6 +72,8 @@ void RtpSelector::createTimer() { ...@@ -72,6 +72,8 @@ void RtpSelector::createTimer() {
} }
void RtpSelector::delProcess(const string &stream_id,const RtpProcess *ptr) { void RtpSelector::delProcess(const string &stream_id,const RtpProcess *ptr) {
RtpProcess::Ptr process;
{
lock_guard<decltype(_mtx_map)> lck(_mtx_map); lock_guard<decltype(_mtx_map)> lck(_mtx_map);
auto it = _map_rtp_process.find(stream_id); auto it = _map_rtp_process.find(stream_id);
if (it == _map_rtp_process.end()) { if (it == _map_rtp_process.end()) {
...@@ -80,12 +82,15 @@ void RtpSelector::delProcess(const string &stream_id,const RtpProcess *ptr) { ...@@ -80,12 +82,15 @@ void RtpSelector::delProcess(const string &stream_id,const RtpProcess *ptr) {
if (it->second->getProcess().get() != ptr) { if (it->second->getProcess().get() != ptr) {
return; return;
} }
auto process = it->second->getProcess(); process = it->second->getProcess();
_map_rtp_process.erase(it); _map_rtp_process.erase(it);
}
process->onDetach(); process->onDetach();
} }
void RtpSelector::onManager() { void RtpSelector::onManager() {
List<RtpProcess::Ptr> clear_list;
{
lock_guard<decltype(_mtx_map)> lck(_mtx_map); lock_guard<decltype(_mtx_map)> lck(_mtx_map);
for (auto it = _map_rtp_process.begin(); it != _map_rtp_process.end();) { for (auto it = _map_rtp_process.begin(); it != _map_rtp_process.end();) {
if (it->second->getProcess()->alive()) { if (it->second->getProcess()->alive()) {
...@@ -93,10 +98,14 @@ void RtpSelector::onManager() { ...@@ -93,10 +98,14 @@ void RtpSelector::onManager() {
continue; continue;
} }
WarnL << "RtpProcess timeout:" << it->first; WarnL << "RtpProcess timeout:" << it->first;
auto process = it->second->getProcess(); clear_list.emplace_back(it->second->getProcess());
it = _map_rtp_process.erase(it); it = _map_rtp_process.erase(it);
process->onDetach();
} }
}
clear_list.for_each([](const RtpProcess::Ptr &process) {
process->onDetach();
});
} }
RtpSelector::RtpSelector() { RtpSelector::RtpSelector() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论