]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Add fsctl command to summon reincarnation
authorTravis Cross <tc@traviscross.com>
Tue, 10 Jun 2014 22:21:38 +0000 (22:21 +0000)
committerTravis Cross <tc@traviscross.com>
Tue, 10 Jun 2014 22:39:27 +0000 (22:39 +0000)
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
src/mod/applications/mod_commands/mod_commands.c
src/switch_core.c

index d7f5bc747ef4f7376a22adc229f4f25c7d0f2d3f..e90abe2dd30b5eace3afa57a0c325c58d6aa17dd 100644 (file)
@@ -1994,6 +1994,7 @@ typedef enum {
        SCSC_DEBUG_LEVEL,
        SCSC_FLUSH_DB_HANDLES,
        SCSC_SHUTDOWN_NOW,
+       SCSC_REINCARNATE_NOW,
        SCSC_CALIBRATE_CLOCK,
        SCSC_SAVE_HISTORY,
        SCSC_CRASH,
index 0d826f3c2abe2d4830c1a0bc5890f8784516bd10..e418b1b297745d19f7ad81436f42ef0ea79aa879 100644 (file)
@@ -2268,6 +2268,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;
                                        }
@@ -6746,6 +6750,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");
index 9a72a5a78d1edfda236e6c813a8270fc841d08ca..321bd0dd75603deaa4100e1720b1523410b8e161 100644 (file)
@@ -2421,6 +2421,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:
                {