r = _switch_cache_db_get_db_handle(dbh, SCDB_TYPE_CORE_DB, &options, file, func, line);
}
+ /* I *think* we can do without this now, if not let me know
if (r == SWITCH_STATUS_SUCCESS && !(*dbh)->io_mutex) {
(*dbh)->io_mutex = sql_manager.io_mutex;
}
+ */
return r;
}
switch_queue_t *queue = (switch_queue_t *) obj;
uint32_t index = 0;
int my_id = 0;
+ int auto_pause = 0;
switch_mutex_lock(EVENT_QUEUE_MUTEX);
THREAD_COUNT++;
switch_event_t *event = NULL;
int loops = 0;
+ if (auto_pause) {
+ if (!--auto_pause) {
+ switch_core_session_ctl(SCSC_PAUSE_INBOUND, &auto_pause);
+ } else {
+ switch_cond_next();
+ }
+ }
+
if (switch_queue_pop(queue, &pop) != SWITCH_STATUS_SUCCESS) {
break;
}
while (event) {
+
if (++loops > 2) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Event system overloading\n");
+ uint32_t last_sps = 0, sess_count = switch_core_session_count();
+ if (auto_pause) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Event system *still* overloading.\n");
+ } else {
+ switch_core_session_ctl(SCSC_LAST_SPS, &last_sps);
+ last_sps = (uint32_t) (float) (last_sps * 0.75f);
+ sess_count = (uint32_t) (float) (sess_count * 0.75f);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT,
+ "Event system overloading. Taking a 10 second break, Reducing max_sessions to %d %dsps\n", sess_count, last_sps);
+ switch_core_session_limit(sess_count);
+ switch_core_session_ctl(SCSC_SPS, &last_sps);
+ auto_pause = 10;
+ switch_core_session_ctl(SCSC_PAUSE_INBOUND, &auto_pause);
+ }
switch_yield(1000000);
}