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) {
sofia_dispatch_event_t *de = (sofia_dispatch_event_t *) msg->pointer_arg;
switch_mutex_lock(tech_pvt->sofia_mutex);
if (switch_core_session_in_thread(session)) {
de->session = session;
}
sofia_process_dispatch_event(&de);
switch_mutex_unlock(tech_pvt->sofia_mutex);
goto end;

View File

@ -143,6 +143,7 @@ typedef struct sofia_dispatch_event_s {
nua_t *nua;
sofia_profile_t *profile;
int save;
switch_core_session_t *session;
} sofia_dispatch_event_t;
struct sofia_private {

View File

@ -818,14 +818,14 @@ static void our_sofia_event_callback(nua_event_t event,
return;
}
} 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);
channel = switch_core_session_get_channel(session);
if (tech_pvt) {
switch_mutex_lock(tech_pvt->sofia_mutex);
locked = 1;
} else {
switch_core_session_rwunlock(session);
if (session != de->session) switch_core_session_rwunlock(session);
return;
}
@ -1111,7 +1111,7 @@ static void our_sofia_event_callback(nua_event_t event,
switch_mutex_unlock(tech_pvt->sofia_mutex);
}
if (session) {
if (session && session != de->session) {
switch_core_session_rwunlock(session);
}
}