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:25:46 -05:00
parent a40b6ad471
commit 013d0c50fb

View File

@@ -1791,10 +1791,17 @@ static struct sigaction urg_handler = {
static void _hup_handler(int num)
{
int a = 0, save_errno = errno;
printf("Received HUP signal -- Reloading configs\n");
if (restartnow)
int a = 0;
int save_errno = errno;
if (restartnow) {
if (el) {
el_end(el);
}
execvp(_argv[0], _argv);
}
printf("Received HUP signal -- Reloading configs\n");
sig_flags.need_reload = 1;
if (sig_alert_pipe[1] != -1) {
if (write(sig_alert_pipe[1], &a, sizeof(a)) < 0) {
@@ -2137,7 +2144,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);
}