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) {
|
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 {
|
||||||
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,
|
||||||
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue