From aa10023269b6ed2cec43b4d9c2d53fe89cc4a898 Mon Sep 17 00:00:00 2001 From: Travis Cross Date: Tue, 10 Jun 2014 22:21:38 +0000 Subject: [PATCH] Add fsctl command to summon reincarnation If you start freeswitch with -reincarnate or -reincarnate-reexec, FS will restart automatically in the event of an unexpected exit. Currently, you can cause FS to immediately call exit(0) with `fsctl shutdown now`, or you can have it call abort() with `fsctl crash`. Which are both nice, but if you have reincarnation engaged, you really might want FS to call exit([non-zero]) so the great supervisor immediately breathes life back into your system. This is now available via `fsctl shutdown reincarnate now`. --- src/include/switch_types.h | 1 + src/mod/applications/mod_commands/mod_commands.c | 5 +++++ src/switch_core.c | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 125a356071..43f2375e89 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1861,6 +1861,7 @@ typedef enum { SCSC_DEBUG_LEVEL, SCSC_FLUSH_DB_HANDLES, SCSC_SHUTDOWN_NOW, + SCSC_REINCARNATE_NOW, SCSC_CALIBRATE_CLOCK, SCSC_SAVE_HISTORY, SCSC_CRASH, diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index 581b8330e1..4ae9cf65cd 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -2276,6 +2276,10 @@ SWITCH_STANDARD_API(ctl_function) command = SCSC_SHUTDOWN_NOW; } else if (!strcasecmp(argv[x], "asap")) { command = SCSC_SHUTDOWN_ASAP; + } else if (!strcasecmp(argv[x], "reincarnate") + && (x+1 < argc) && argv[x+1] && !strcasecmp(argv[x+1], "now")) { + ++x; + command = SCSC_REINCARNATE_NOW; } else if (!strcasecmp(argv[x], "restart")) { arg = 1; } @@ -6384,6 +6388,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) switch_console_set_complete("add fsctl shutdown cancel"); switch_console_set_complete("add fsctl shutdown elegant"); switch_console_set_complete("add fsctl shutdown elegant restart"); + switch_console_set_complete("add fsctl shutdown reincarnate now"); switch_console_set_complete("add fsctl shutdown restart"); switch_console_set_complete("add fsctl shutdown restart asap"); switch_console_set_complete("add fsctl shutdown restart elegant"); diff --git a/src/switch_core.c b/src/switch_core.c index dc586075d3..9e6b739601 100644 --- a/src/switch_core.c +++ b/src/switch_core.c @@ -2392,6 +2392,10 @@ SWITCH_DECLARE(int32_t) switch_core_session_ctl(switch_session_ctl_t cmd, void * switch_console_save_history(); exit(0); break; + case SCSC_REINCARNATE_NOW: + switch_console_save_history(); + exit(SWITCH_STATUS_RESTART); + break; case SCSC_SHUTDOWN_ELEGANT: case SCSC_SHUTDOWN_ASAP: {