skip looking up session again in hash table when we already are parsing the event from the session thread
This commit is contained in:
parent
d364e9f2b8
commit
bd64631b5c
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue