]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
add fsctl flush_db_handles to expire any unused db handles
authorAnthony Minessale <anthony.minessale@gmail.com>
Thu, 17 Dec 2009 00:03:17 +0000 (00:03 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Thu, 17 Dec 2009 00:03:17 +0000 (00:03 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15982 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_core.h
src/include/switch_types.h
src/mod/applications/mod_commands/mod_commands.c
src/switch_core.c
src/switch_core_sqldb.c

index dc9985dfe1a4f01320642c94bb30e3f3f9eafa99..655c0b005f3a50fcb67c1634339f23bdc330cf48 100644 (file)
@@ -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
index 9ce407f31e24d4f22e242f48d0aca043f2fa093a..a3ff346cf0c7911515614c7c8fd864fee796194a 100644 (file)
@@ -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 {
index 9dc1be8c86fa11978dba0136ed3438f1adaf985b..ec13bd2934544b4efe71794f4750fea20e39f6fb 100644 (file)
@@ -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");
index 6cf9d9b6002b208501541df19fed1c3c2df66b58..3d02214bbbe23955dfe74a3d2881ef2742f317d8 100644 (file)
@@ -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;
index a16886b3ce65c1f19425baa78ecf47439de203e4..a990a34f5ca20fd05f18c3b700c0ccabe0c487d1 100644 (file)
@@ -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) {