diff --git a/asterisk.c b/asterisk.c index dd943334e492de144f9275ca575bd6a21df3c791..0f583e0ca6b09b2e28bf468499f1b509b7c7266f 100755 --- a/asterisk.c +++ b/asterisk.c @@ -543,9 +543,11 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart) restartnow = 1; /* If there is a consolethread running send it a SIGHUP so it can execvp, otherwise we can do it ourselves */ - if (consolethread != (pthread_t) -1) + if (consolethread != (pthread_t) -1) { pthread_kill(consolethread, SIGHUP); - else + /* Give the signal handler some time to complete */ + sleep(2); + } else execvp(_argv[0], _argv); } @@ -1471,6 +1473,8 @@ int main(int argc, char *argv[]) ast_verbose(" ]\n"); if (option_verbose || option_console) ast_verbose(term_color(tmp, "Asterisk Ready.\n", COLOR_BRWHITE, COLOR_BLACK, sizeof(tmp))); + if (option_nofork) + consolethread = pthread_self(); fully_booted = 1; pthread_sigmask(SIG_UNBLOCK, &sigs, NULL); #ifdef __AST_DEBUG_MALLOC @@ -1485,8 +1489,6 @@ int main(int argc, char *argv[]) ast_cli_register(&astshutdownwhenconvenient); ast_cli_register(&aborthalt); ast_cli_register(&astbang); - if (option_nofork) - consolethread = pthread_self(); if (option_console) { /* Console stuff now... */ /* Register our quit function */