From 307d1b78880cba667dee64465b0a25e17f46cfc5 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Fri, 23 Jul 2010 16:42:25 +0000 Subject: [PATCH] Avoid race with consolethread on shutdown (on parallel processors). (closes issue #17080) Reported by: sybasesql Patches: 20100721__issue17080.diff.txt uploaded by tilghman (license 14) Tested by: sybasesql git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@278981 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/asterisk.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/main/asterisk.c b/main/asterisk.c index 33aaaf2fcd..c62447089a 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -1320,14 +1320,21 @@ static void quit_handler(int num, int nice, int safeshutdown, int restart) ast_module_shutdown(); } if (ast_opt_console || ast_opt_remote) { - if (getenv("HOME")) + if (getenv("HOME")) { snprintf(filename, sizeof(filename), "%s/.asterisk_history", getenv("HOME")); - if (!ast_strlen_zero(filename)) + } + if (!ast_strlen_zero(filename)) { ast_el_write_history(filename); - if (el != NULL) - el_end(el); - if (el_hist != NULL) - history_end(el_hist); + } + if (consolethread == AST_PTHREADT_NULL || consolethread == pthread_self()) { + /* Only end if we are the consolethread, otherwise there's a race with that thread. */ + if (el != NULL) { + el_end(el); + } + if (el_hist != NULL) { + history_end(el_hist); + } + } } if (option_verbose) ast_verbose("Executing last minute cleanups\n");