[asterisk-commits] jpeeler: branch 1.6.2 r290863 - in /branches/1.6.2: ./ main/asterisk.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Oct 7 21:45:47 CDT 2010
Author: jpeeler
Date: Thu Oct 7 21:45:44 2010
New Revision: 290863
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=290863
Log:
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
........
Modified:
branches/1.6.2/ (props changed)
branches/1.6.2/main/asterisk.c
Propchange: branches/1.6.2/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Modified: branches/1.6.2/main/asterisk.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.6.2/main/asterisk.c?view=diff&rev=290863&r1=290862&r2=290863
==============================================================================
--- branches/1.6.2/main/asterisk.c (original)
+++ branches/1.6.2/main/asterisk.c Thu Oct 7 21:45:44 2010
@@ -275,6 +275,7 @@
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];
@@ -1628,14 +1629,15 @@
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);
}
@@ -3786,9 +3788,8 @@
/* 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);
More information about the asterisk-commits
mailing list