mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-29 18:19:30 +00:00
Merged revisions 290864 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ................ r290864 | jpeeler | 2010-10-07 21:56:24 -0500 (Thu, 07 Oct 2010) | 23 lines Merged revisions 290863 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ................ r290863 | jpeeler | 2010-10-07 21:45:44 -0500 (Thu, 07 Oct 2010) | 16 lines Merged revisions 290862 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r290862 | jpeeler | 2010-10-07 21:35:29 -0500 (Thu, 07 Oct 2010) | 9 lines Ensure editline cleanup occurs when Ctrl-C is pressed at control console. A recent change was made to avoid a race condition on shutdown which only called the end functions from the console thread. However, when pressing Ctrl-C the quit handler is called from the signal handler thread. (closes issue #17698) Reported by: jmls ........ ................ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@290865 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -278,6 +278,7 @@ static char *_argv[256];
|
||||
static int shuttingdown;
|
||||
static int restartnow;
|
||||
static pthread_t consolethread = AST_PTHREADT_NULL;
|
||||
static pthread_t mon_sig_flags;
|
||||
static int canary_pid = 0;
|
||||
static char canary_filename[128];
|
||||
|
||||
@@ -1637,14 +1638,15 @@ static void quit_handler(int num, int niceness, int safeshutdown, int restart)
|
||||
ast_module_shutdown();
|
||||
}
|
||||
if (ast_opt_console || (ast_opt_remote && !ast_opt_exec)) {
|
||||
pthread_t thisthread = pthread_self();
|
||||
if (getenv("HOME")) {
|
||||
snprintf(filename, sizeof(filename), "%s/.asterisk_history", getenv("HOME"));
|
||||
}
|
||||
if (!ast_strlen_zero(filename)) {
|
||||
ast_el_write_history(filename);
|
||||
}
|
||||
if (consolethread == AST_PTHREADT_NULL || consolethread == pthread_self()) {
|
||||
/* Only end if we are the consolethread, otherwise there's a race with that thread. */
|
||||
if (consolethread == AST_PTHREADT_NULL || consolethread == thisthread || mon_sig_flags == thisthread) {
|
||||
/* Only end if we are the consolethread or signal handler, otherwise there's a race with that thread. */
|
||||
if (el != NULL) {
|
||||
el_end(el);
|
||||
}
|
||||
@@ -3835,9 +3837,8 @@ int main(int argc, char *argv[])
|
||||
/* Console stuff now... */
|
||||
/* Register our quit function */
|
||||
char title[256];
|
||||
pthread_t dont_care;
|
||||
|
||||
ast_pthread_create_detached(&dont_care, NULL, monitor_sig_flags, NULL);
|
||||
ast_pthread_create_detached(&mon_sig_flags, NULL, monitor_sig_flags, NULL);
|
||||
|
||||
set_icon("Asterisk");
|
||||
snprintf(title, sizeof(title), "Asterisk Console on '%s' (pid %ld)", hostname, (long)ast_mainpid);
|
||||
|
Reference in New Issue
Block a user