提交 19f01bf5 authored 作者: James Zhang's avatar James Zhang

freetdm: fixing a potential crash on a rarely happened situation

上级 3c4fdca9
...@@ -1314,6 +1314,10 @@ static ftdm_status_t handle_show_status(ftdm_stream_handle_t *stream, int span, ...@@ -1314,6 +1314,10 @@ static ftdm_status_t handle_show_status(ftdm_stream_handle_t *stream, int span,
}else { }else {
stream->write_function(stream, "relay=N"); stream->write_function(stream, "relay=N");
} }
#ifdef SMG_RELAY_DBG
stream->write_function(stream, "| flag=0x%llx", ftdmchan->flags);
#endif
} }
#ifdef SMG_RELAY_DBG #ifdef SMG_RELAY_DBG
......
...@@ -614,20 +614,22 @@ static void ftdm_sangoma_ss7_process_stack_event (sngss7_event_data_t *sngss7_ev ...@@ -614,20 +614,22 @@ static void ftdm_sangoma_ss7_process_stack_event (sngss7_event_data_t *sngss7_ev
break; break;
case SNGSS7_REL_CFM_EVENT: case SNGSS7_REL_CFM_EVENT:
{ {
ftdm_channel_t *peer_chan = sngss7_info->peer_data->ftdmchan; if (sngss7_info->peer_data) {
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_DOWN); ftdm_channel_t *peer_chan = sngss7_info->peer_data->ftdmchan;
if (peer_chan) { ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_DOWN);
/* we need to unlock our chan or we risk deadlock */ if (peer_chan) {
ftdm_channel_advance_states(ftdmchan); /* we need to unlock our chan or we risk deadlock */
ftdm_channel_unlock(ftdmchan); ftdm_channel_advance_states(ftdmchan);
ftdm_channel_unlock(ftdmchan);
ftdm_channel_lock(peer_chan);
if (peer_chan->state != FTDM_CHANNEL_STATE_DOWN) { ftdm_channel_lock(peer_chan);
ftdm_set_state(peer_chan, FTDM_CHANNEL_STATE_DOWN); if (peer_chan->state != FTDM_CHANNEL_STATE_DOWN) {
} ftdm_set_state(peer_chan, FTDM_CHANNEL_STATE_DOWN);
ftdm_channel_unlock(peer_chan); }
ftdm_channel_unlock(peer_chan);
ftdm_channel_lock(ftdmchan); ftdm_channel_lock(ftdmchan);
}
} }
} }
break; break;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论