skip looking up session again in hash table when we already are parsing the event from the session thread

This commit is contained in:
Anthony Minessale 2011-08-03 23:47:47 -05:00
parent d364e9f2b8
commit bd64631b5c
3 changed files with 7 additions and 3 deletions

View File

@ -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;

View File

@ -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 {

View File

@ -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,
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);
} }
} }