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

skip looking up session again in hash table when we already are parsing the…

skip looking up session again in hash table when we already are parsing the event from the session thread
上级 d364e9f2
...@@ -1388,6 +1388,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi ...@@ -1388,6 +1388,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
if (msg->message_id == SWITCH_MESSAGE_INDICATE_SIGNAL_DATA) { if (msg->message_id == SWITCH_MESSAGE_INDICATE_SIGNAL_DATA) {
sofia_dispatch_event_t *de = (sofia_dispatch_event_t *) msg->pointer_arg; sofia_dispatch_event_t *de = (sofia_dispatch_event_t *) msg->pointer_arg;
switch_mutex_lock(tech_pvt->sofia_mutex); switch_mutex_lock(tech_pvt->sofia_mutex);
if (switch_core_session_in_thread(session)) {
de->session = session;
}
sofia_process_dispatch_event(&de); sofia_process_dispatch_event(&de);
switch_mutex_unlock(tech_pvt->sofia_mutex); switch_mutex_unlock(tech_pvt->sofia_mutex);
goto end; goto end;
......
...@@ -143,6 +143,7 @@ typedef struct sofia_dispatch_event_s { ...@@ -143,6 +143,7 @@ typedef struct sofia_dispatch_event_s {
nua_t *nua; nua_t *nua;
sofia_profile_t *profile; sofia_profile_t *profile;
int save; int save;
switch_core_session_t *session;
} sofia_dispatch_event_t; } sofia_dispatch_event_t;
struct sofia_private { struct sofia_private {
......
...@@ -818,14 +818,14 @@ static void our_sofia_event_callback(nua_event_t event, ...@@ -818,14 +818,14 @@ static void our_sofia_event_callback(nua_event_t event,
return; return;
} }
} else if (!zstr(sofia_private->uuid)) { } else if (!zstr(sofia_private->uuid)) {
if ((session = switch_core_session_locate(sofia_private->uuid))) { if ((session = de->session) || (session = switch_core_session_locate(sofia_private->uuid))) {
tech_pvt = switch_core_session_get_private(session); tech_pvt = switch_core_session_get_private(session);
channel = switch_core_session_get_channel(session); channel = switch_core_session_get_channel(session);
if (tech_pvt) { if (tech_pvt) {
switch_mutex_lock(tech_pvt->sofia_mutex); switch_mutex_lock(tech_pvt->sofia_mutex);
locked = 1; locked = 1;
} else { } else {
switch_core_session_rwunlock(session); if (session != de->session) switch_core_session_rwunlock(session);
return; return;
} }
...@@ -1111,7 +1111,7 @@ static void our_sofia_event_callback(nua_event_t event, ...@@ -1111,7 +1111,7 @@ static void our_sofia_event_callback(nua_event_t event,
switch_mutex_unlock(tech_pvt->sofia_mutex); switch_mutex_unlock(tech_pvt->sofia_mutex);
} }
if (session) { if (session && session != de->session) {
switch_core_session_rwunlock(session); switch_core_session_rwunlock(session);
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论