提交 f1397e44 authored 作者: Anthony Minessale's avatar Anthony Minessale

add a bunch of locking to mod_iax, if it deadlocks nobody will be suprised part 2

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@7992 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 6c83e20b
...@@ -1080,16 +1080,18 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_iax_runtime) ...@@ -1080,16 +1080,18 @@ SWITCH_MODULE_RUNTIME_FUNCTION(mod_iax_runtime)
case IAX_EVENT_BUSY: case IAX_EVENT_BUSY:
case IAX_EVENT_HANGUP: case IAX_EVENT_HANGUP:
if (channel) { if (channel) {
switch_mutex_lock(globals.mutex);
switch_mutex_lock(tech_pvt->flag_mutex); switch_mutex_lock(tech_pvt->flag_mutex);
switch_clear_flag(tech_pvt, TFLAG_IO); switch_clear_flag(tech_pvt, TFLAG_IO);
switch_clear_flag(tech_pvt, TFLAG_VOICE); switch_clear_flag(tech_pvt, TFLAG_VOICE);
switch_mutex_unlock(tech_pvt->flag_mutex); switch_mutex_unlock(tech_pvt->flag_mutex);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Hangup %s\n", switch_channel_get_name(channel)); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Hangup %s\n", switch_channel_get_name(channel));
switch_set_flag_locked(tech_pvt, TFLAG_HANGUP); switch_set_flag_locked(tech_pvt, TFLAG_HANGUP);
switch_channel_hangup(channel, iaxevent->etype == IAX_EVENT_HANGUP ? SWITCH_CAUSE_NORMAL_CLEARING : SWITCH_CAUSE_FACILITY_REJECTED); switch_channel_hangup(channel, iaxevent->etype == IAX_EVENT_HANGUP ? SWITCH_CAUSE_NORMAL_CLEARING : SWITCH_CAUSE_FACILITY_REJECTED);
iaxevent->session = NULL; iaxevent->session = NULL;
switch_mutex_unlock(globals.mutex);
} }
break; break;
case IAX_EVENT_CNG: case IAX_EVENT_CNG:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论