]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 278982 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Fri, 23 Jul 2010 16:44:53 +0000 (16:44 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Fri, 23 Jul 2010 16:44:53 +0000 (16:44 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r278982 | tilghman | 2010-07-23 11:43:34 -0500 (Fri, 23 Jul 2010) | 15 lines

  Merged revisions 278981 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r278981 | tilghman | 2010-07-23 11:42:25 -0500 (Fri, 23 Jul 2010) | 8 lines

    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.6.2@278983 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/asterisk.c

index c51e8cc82deaa0422cd229000ecd47e8324040a9..c8bed4a53e1cd4c5eb5368a4a29a4a3d7fc463f9 100644 (file)
@@ -1626,14 +1626,21 @@ 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)) {
-               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");