]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix endless 5xx race when system is paused or overloaded
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 21 Aug 2012 21:19:25 +0000 (16:19 -0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 21 Aug 2012 21:19:25 +0000 (16:19 -0500)
src/mod/endpoints/mod_sofia/sofia.c

index f2a1e2469cfd2ed7c8a1d16579873c0eaa921452..486206f25e23e1c9f2dd1b7d5ac070b932843318 100644 (file)
@@ -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);