From: Anthony Minessale Date: Tue, 21 Aug 2012 21:19:25 +0000 (-0500) Subject: fix endless 5xx race when system is paused or overloaded X-Git-Tag: v1.2.3^2~205 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00f586ca5a926bf2feae2e58a1b346060478b945;p=thirdparty%2Ffreeswitch.git fix endless 5xx race when system is paused or overloaded --- diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index f2a1e2469c..486206f25e 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -1656,23 +1656,34 @@ void sofia_event_callback(nua_event_t event, uint32_t sess_count = switch_core_session_count(); uint32_t sess_max = switch_core_session_limit(0); - - if (sess_count >= sess_max || !sofia_test_pflag(profile, PFLAG_RUNNING) || !switch_core_ready_inbound()) { - nua_respond(nh, 503, "Maximum Calls In Progress", SIPTAG_RETRY_AFTER_STR("300"), TAG_END()); - goto end; - } + switch(event) { + case nua_i_invite: + case nua_i_register: + case nua_i_options: + case nua_i_notify: + case nua_i_info: + + if (sess_count >= sess_max || !sofia_test_pflag(profile, PFLAG_RUNNING) || !switch_core_ready_inbound()) { + nua_respond(nh, 503, "Maximum Calls In Progress", SIPTAG_RETRY_AFTER_STR("300"), TAG_END()); + goto end; + } + - if (switch_queue_size(mod_sofia_globals.msg_queue) > critical) { - nua_respond(nh, 503, "System Busy", SIPTAG_RETRY_AFTER_STR("300"), TAG_END()); - goto end; - } - - if (sofia_test_pflag(profile, PFLAG_STANDBY)) { - if (event < nua_r_set_params || event > nua_r_authenticate) { + if (switch_queue_size(mod_sofia_globals.msg_queue) > critical) { + nua_respond(nh, 503, "System Busy", SIPTAG_RETRY_AFTER_STR("300"), TAG_END()); + goto end; + } + + if (sofia_test_pflag(profile, PFLAG_STANDBY)) { nua_respond(nh, 503, "System Paused", TAG_END()); + goto end; } - goto end; + break; + + default: + break; + } switch_mutex_lock(profile->flag_mutex);