Commit 100af97d by xiongziliang

修复死锁问题:#486

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