]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3321 release rwlock on error
authorJeff Lenk <jeff@jefflenk.com>
Tue, 7 Jun 2011 02:28:14 +0000 (21:28 -0500)
committerJeff Lenk <jeff@jefflenk.com>
Tue, 7 Jun 2011 02:28:14 +0000 (21:28 -0500)
src/mod/endpoints/mod_sofia/mod_sofia.c

index b672cccb809220d4535495e6ede0a202fb25c7d4..31d437d7b03d5012e8507979bc22e343f014e2fc 100644 (file)
@@ -4048,6 +4048,7 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
        char *not_const = NULL;
        int cid_locked = 0;
        switch_channel_t *o_channel = NULL;
+       sofia_gateway_t *gateway_ptr = NULL;
 
        *new_session = NULL;
 
@@ -4087,7 +4088,6 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
 
        if (!strncasecmp(profile_name, "gateway/", 8)) {
                char *gw, *params;
-               sofia_gateway_t *gateway_ptr = NULL;
 
                if (!(gw = strchr(profile_name, '/'))) {
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid URL\n");
@@ -4115,8 +4115,6 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
                        switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Gateway is down!\n");
                        cause = SWITCH_CAUSE_NETWORK_OUT_OF_ORDER;
                        gateway_ptr->ob_failed_calls++;
-                       sofia_reg_release_gateway(gateway_ptr);
-                       gateway_ptr = NULL;
                        goto error;
                }
 
@@ -4470,6 +4468,10 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
        goto done;
 
   error:
+       if (gateway_ptr) {
+               sofia_reg_release_gateway(gateway_ptr);
+       }
+
        if (nsession) {
                switch_core_session_destroy(&nsession);
        }