SWITCH_DECLARE(switch_status_t) _switch_core_recovery_db_handle(switch_cache_db_handle_t ** dbh, const char *file, const char *func, int line);
#define switch_core_recovery_db_handle(_a) _switch_core_recovery_db_handle(_a, __FILE__, __SWITCH_FUNC__, __LINE__)
+SWITCH_DECLARE(switch_status_t) _switch_core_persist_db_handle(switch_cache_db_handle_t ** dbh, const char *file, const char *func, int line);
+#define switch_core_persist_db_handle(_a) _switch_core_persist_db_handle(_a, __FILE__, __SWITCH_FUNC__, __LINE__)
+
SWITCH_DECLARE(switch_bool_t) switch_cache_db_test_reactive(switch_cache_db_handle_t *db,
const char *test_sql, const char *drop_sql, const char *reactive_sql);
SWITCH_DECLARE(switch_status_t) switch_cache_db_persistant_execute(switch_cache_db_handle_t *dbh, const char *sql, uint32_t retries);
* Try to use a round-robin scheduler
* with a fallback if that does not work
*/
+ int fd;
+ const char *rt = "/proc/sys/kernel/sched_rt_runtime_us";
+ char data[] = "-1\n";
struct sched_param sched = { 0 };
sched.sched_priority = 1;
- if (sched_setscheduler(0, SCHED_RR, &sched)) {
+ if (sched_setscheduler(0, SCHED_FIFO, &sched)) {
sched.sched_priority = 0;
if (sched_setscheduler(0, SCHED_OTHER, &sched)) {
return -1;
}
}
+
+ if ((fd = open(rt, O_WRONLY)) > 0) {
+ int r;
+
+ if (!(r = write(fd, data, sizeof(data)))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error Disablling RT limits [%s][%d]\n", rt, r);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Disabling RT throttling.\n");
+ }
+ close(fd);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error opening %s\n", rt);
+ }
+
+
#endif
+
+
#ifdef HAVE_SETPRIORITY
/*
* setpriority() works on FreeBSD (6.2), nice() doesn't
}
-#define SWITCH_CORE_DB "core"
+#define SWITCH_CORE_DB "file:scoreboard?mode=memory&cache=shared"
/*!
\brief Open the default system database
*/
return r;
}
+#define SWITCH_CORE_PERSIST_DB "core"
+/*!
+ \brief Open the default system database
+*/
+SWITCH_DECLARE(switch_status_t) _switch_core_persist_db_handle(switch_cache_db_handle_t **dbh, const char *file, const char *func, int line)
+{
+ switch_cache_db_connection_options_t options = { {0} };
+ switch_status_t r;
+
+ if (!sql_manager.manage) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ if (zstr(runtime.odbc_dsn)) {
+ if (switch_test_flag((&runtime), SCF_CORE_ODBC_REQ)) {
+ return SWITCH_STATUS_FALSE;
+ }
+
+ if (runtime.dbname) {
+ options.core_db_options.db_path = runtime.dbname;
+ } else {
+ options.core_db_options.db_path = SWITCH_CORE_PERSIST_DB;
+ }
+ r = _switch_cache_db_get_db_handle(dbh, SCDB_TYPE_CORE_DB, &options, file, func, line);
+
+ } else {
+ options.odbc_options.dsn = runtime.odbc_dsn;
+ options.odbc_options.user = runtime.odbc_user;
+ options.odbc_options.pass = runtime.odbc_pass;
+
+ r = _switch_cache_db_get_db_handle(dbh, SCDB_TYPE_ODBC, &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;
+}
+
+
#define SWITCH_CORE_RECOVERY_DB "core_recovery"
SWITCH_DECLARE(switch_status_t) _switch_core_recovery_db_handle(switch_cache_db_handle_t **dbh, const char *file, const char *func, int line)
{