From: Andrey Volk Date: Fri, 20 Dec 2019 21:15:57 +0000 (+0400) Subject: [mod_sofia] Fix crash from double profile unlock on outgoing channel from a gateway... X-Git-Tag: v1.10.2^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6f0ad146d2e8dd3f96be7b3deee3383c7890f1d5;p=thirdparty%2Ffreeswitch.git [mod_sofia] Fix crash from double profile unlock on outgoing channel from a gateway on a paused profile --- diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 61350bdf72..84da642aff 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -4775,6 +4775,8 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session goto error; } + profile = gateway_ptr->profile; + if (gateway_ptr->status != SOFIA_GATEWAY_UP) { switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Gateway \'%s\' is down!\n", gw); cause = SWITCH_CAUSE_GATEWAY_DOWN; @@ -4815,8 +4817,6 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session goto error; } - profile = gateway_ptr->profile; - if (profile && sofia_test_pflag(profile, PFLAG_STANDBY)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "System Paused\n"); cause = SWITCH_CAUSE_SYSTEM_SHUTDOWN; @@ -5180,7 +5180,8 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session goto done; error: - if (gateway_ptr) { + /* gateway pointer lock is really a readlock of the profile so we let the profile release below free that lock if we have a profile */ + if (gateway_ptr && !profile) { sofia_reg_release_gateway(gateway_ptr); }