From ba8e009228cfa907fad4159ad155994f0b8dbd89 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 17 Dec 2009 00:03:17 +0000 Subject: [PATCH] add fsctl flush_db_handles to expire any unused db handles git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15982 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_core.h | 1 + src/include/switch_types.h | 3 ++- src/mod/applications/mod_commands/mod_commands.c | 4 ++++ src/switch_core.c | 3 +++ src/switch_core_sqldb.c | 7 +++++++ 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/include/switch_core.h b/src/include/switch_core.h index dc9985dfe1..655c0b005f 100644 --- a/src/include/switch_core.h +++ b/src/include/switch_core.h @@ -2044,6 +2044,7 @@ SWITCH_DECLARE(switch_status_t) switch_cache_db_persistant_execute(switch_cache_ SWITCH_DECLARE(switch_status_t) switch_cache_db_persistant_execute_trans(switch_cache_db_handle_t *dbh, char *sql, uint32_t retries); SWITCH_DECLARE(void) switch_cache_db_detach(void); SWITCH_DECLARE(uint32_t) switch_core_debug_level(void); +SWITCH_DECLARE(void) switch_cache_db_flush_handles(void); SWITCH_END_EXTERN_C #endif diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 9ce407f31e..a3ff346cf0 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1431,7 +1431,8 @@ typedef enum { SCSC_SHUTDOWN_ASAP, SCSC_CANCEL_SHUTDOWN, SCSC_SEND_SIGHUP, - SCSC_DEBUG_LEVEL + SCSC_DEBUG_LEVEL, + SCSC_FLUSH_DB_HANDLES } switch_session_ctl_t; typedef enum { diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index 9dc1be8c86..ec13bd2934 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -1349,6 +1349,9 @@ SWITCH_STANDARD_API(ctl_function) arg = 1; switch_core_session_ctl(SCSC_HUPALL, &arg); stream->write_function(stream, "+OK\n"); + } else if (!strcasecmp(argv[0], "flush_db_handles")) { + switch_core_session_ctl(SCSC_FLUSH_DB_HANDLES, NULL); + stream->write_function(stream, "+OK\n"); } else if (!strcasecmp(argv[0], "pause")) { arg = 1; switch_core_session_ctl(SCSC_PAUSE_INBOUND, &arg); @@ -3944,6 +3947,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) switch_console_set_complete("add fsctl shutdown restart elegant"); switch_console_set_complete("add fsctl sps"); switch_console_set_complete("add fsctl sync_clock"); + switch_console_set_complete("add fsctl flush_db_handles"); switch_console_set_complete("add nat_map reinit"); switch_console_set_complete("add nat_map republish"); switch_console_set_complete("add nat_map status"); diff --git a/src/switch_core.c b/src/switch_core.c index 6cf9d9b600..3d02214bbb 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -1568,6 +1568,9 @@ SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, int32_ } switch (cmd) { + case SCSC_FLUSH_DB_HANDLES: + switch_cache_db_flush_handles(); + break; case SCSC_SEND_SIGHUP: handle_SIGHUP(1); break; diff --git a/src/switch_core_sqldb.c b/src/switch_core_sqldb.c index a16886b3ce..a990a34f5c 100644 --- a/src/switch_core_sqldb.c +++ b/src/switch_core_sqldb.c @@ -144,6 +144,13 @@ static void sql_close(time_t prune) } +SWITCH_DECLARE(void) switch_cache_db_flush_handles(void) +{ + sql_close(switch_epoch_time_now(NULL) + SQL_CACHE_TIMEOUT + 1); +} + + + SWITCH_DECLARE(void) switch_cache_db_release_db_handle(switch_cache_db_handle_t **dbh) { if (dbh && *dbh) {