]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
core: Fix handling of restart from remote console.
authorCorey Farrell <git@cfware.com>
Thu, 15 Nov 2018 11:33:11 +0000 (06:33 -0500)
committerCorey Farrell <git@cfware.com>
Thu, 15 Nov 2018 11:33:11 +0000 (06:33 -0500)
We cannot use need_el_end and SIGURG when restarting.  Instead we need
to run el_end within the SIGHUP restartnow handler.

ASTERISK-28158

Change-Id: Ia852276363c81bdcf1aa29eb4558c5c2fa1218a0

main/asterisk.c

index 12e6255db102cb02d78fa1eeb849a34880b3c1ef..cf50b3fcddd90d419d076b8f457feb8751236bfa 100644 (file)
@@ -1673,9 +1673,15 @@ static struct sigaction urg_handler = {
 static void _hup_handler(int num)
 {
        int save_errno = errno;
-       printf("Received HUP signal -- Reloading configs\n");
-       if (restartnow)
+
+       if (restartnow) {
+               if (el) {
+                       el_end(el);
+               }
                execvp(_argv[0], _argv);
+       }
+
+       printf("Received HUP signal -- Reloading configs\n");
        sig_flags.need_reload = 1;
        if (ast_alertpipe_write(sig_alert_pipe)) {
                fprintf(stderr, "hup_handler: write() failed: %s\n", strerror(errno));
@@ -2016,7 +2022,7 @@ static void really_quit(int num, shutdown_nice_t niceness, int restart)
                        if (el_hist != NULL) {
                                history_end(el_hist);
                        }
-               } else {
+               } else if (!restart) {
                        sig_flags.need_el_end = 1;
                        pthread_kill(consolethread, SIGURG);
                }