core: Fix handling of restart from remote console.

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
This commit is contained in:
Corey Farrell 2018-11-15 06:33:11 -05:00
parent 009d67cd28
commit a36cd6960c
No known key found for this signature in database
GPG Key ID: D1B6E98EB07F7F6C
1 changed files with 9 additions and 3 deletions

View 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);
}