[Freeswitch-svn] [commit] r9807 - in freeswitch/trunk/src: . include mod/applications/mod_commands
Freeswitch SVN
anthm at freeswitch.org
Fri Oct 3 10:58:37 EDT 2008
Author: anthm
Date: Fri Oct 3 10:58:36 2008
New Revision: 9807
Modified:
freeswitch/trunk/src/include/switch_types.h
freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c
freeswitch/trunk/src/switch_core.c
Log:
add shutdown cancel
Modified: freeswitch/trunk/src/include/switch_types.h
==============================================================================
--- freeswitch/trunk/src/include/switch_types.h (original)
+++ freeswitch/trunk/src/include/switch_types.h Fri Oct 3 10:58:36 2008
@@ -211,7 +211,8 @@
SCF_SHUTTING_DOWN = (1 << 2),
SCF_CRASH_PROT = (1 << 3),
SCF_VG = (1 << 4),
- SCF_RESTART = (1 << 5)
+ SCF_RESTART = (1 << 5),
+ SCF_SHUTDOWN_REQUESTED = (1 << 6)
} switch_core_flag_enum_t;
typedef uint32_t switch_core_flag_t;
@@ -1219,7 +1220,8 @@
SCSC_SYNC_CLOCK,
SCSC_MAX_DTMF_DURATION,
SCSC_DEFAULT_DTMF_DURATION,
- SCSC_SHUTDOWN_ELEGANT
+ SCSC_SHUTDOWN_ELEGANT,
+ SCSC_CANCEL_SHUTDOWN
} switch_session_ctl_t;
typedef struct apr_pool_t switch_memory_pool_t;
Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original)
+++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Fri Oct 3 10:58:36 2008
@@ -673,7 +673,7 @@
return SWITCH_STATUS_SUCCESS;
}
-#define CTL_SYNTAX "[hupall|pause|resume|shutdown [elegant|restart]|sps|sync_clock|reclaim_mem|max_sessions|max_dtmf_duration [num]|loglevel [level]]"
+#define CTL_SYNTAX "[hupall|pause|resume|shutdown [cancel|elegant|restart]|sps|sync_clock|reclaim_mem|max_sessions|max_dtmf_duration [num]|loglevel [level]]"
SWITCH_STANDARD_API(ctl_function)
{
int argc;
@@ -706,7 +706,11 @@
arg = 0;
for (x = 1; x < 5; x++) {
if (argv[x]) {
- if (!strcasecmp(argv[x], "elegant")) {
+ if (!strcasecmp(argv[x], "cancel")) {
+ arg = 0;
+ cmd = SCSC_CANCEL_SHUTDOWN;
+ break;
+ } else if (!strcasecmp(argv[x], "elegant")) {
cmd = SCSC_SHUTDOWN_ELEGANT;
} else if (!strcasecmp(argv[x], "restart")) {
arg = 1;
@@ -2679,6 +2683,7 @@
switch_console_set_complete("add fsctl shutdown elegant");
switch_console_set_complete("add fsctl shutdown elegant restart");
switch_console_set_complete("add fsctl shutdown restart elegant");
+ switch_console_set_complete("add fsctl shutdown cancel");
switch_console_set_complete("add fsctl sps");
switch_console_set_complete("add fsctl sync_clock");
switch_console_set_complete("add fsctl reclaim_mem");
Modified: freeswitch/trunk/src/switch_core.c
==============================================================================
--- freeswitch/trunk/src/switch_core.c (original)
+++ freeswitch/trunk/src/switch_core.c Fri Oct 3 10:58:36 2008
@@ -1304,28 +1304,46 @@
case SCSC_HUPALL:
switch_core_session_hupall(SWITCH_CAUSE_MANAGER_REQUEST);
break;
+ case SCSC_CANCEL_SHUTDOWN:
+ switch_clear_flag((&runtime), SCF_SHUTDOWN_REQUESTED);
+ break;
case SCSC_SHUTDOWN_ELEGANT:
{
int x = 19;
- if (*val) {
- switch_set_flag((&runtime), SCF_RESTART);
- }
+
+ switch_set_flag((&runtime), SCF_SHUTDOWN_REQUESTED);
switch_set_flag((&runtime), SCF_NO_NEW_SESSIONS);
- while(runtime.running && switch_core_session_count()) {
+
+ while(runtime.running && switch_test_flag((&runtime), SCF_SHUTDOWN_REQUESTED) && switch_core_session_count()) {
switch_yield(500000);
if (++x == 20) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Shutdown in progress.....\n");
x = 0;
}
}
- runtime.running = 0;
+
+ if (switch_test_flag((&runtime), SCF_SHUTDOWN_REQUESTED)) {
+ if (*val) {
+ switch_set_flag((&runtime), SCF_RESTART);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Restarting\n");
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Shutting down\n");
+ }
+ runtime.running = 0;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Shutdown Cancelled\n");
+ switch_clear_flag((&runtime), SCF_NO_NEW_SESSIONS);
+ }
}
break;
case SCSC_SHUTDOWN:
- runtime.running = 0;
if (*val) {
switch_set_flag((&runtime), SCF_RESTART);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Restarting\n");
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Shutting down\n");
}
+ runtime.running = 0;
break;
case SCSC_CHECK_RUNNING:
*val = runtime.running;
@@ -1431,7 +1449,9 @@
if (runtime.memory_pool) {
apr_pool_destroy(runtime.memory_pool);
- /* apr_terminate(); */
+ if (switch_test_flag((&runtime), SCF_RESTART)) {
+ apr_terminate();
+ }
}
return switch_test_flag((&runtime), SCF_RESTART) ? SWITCH_STATUS_RESTART : SWITCH_STATUS_SUCCESS;
More information about the Freeswitch-svn
mailing list