From: Paul Eggert Date: Mon, 1 Jul 2013 21:06:12 +0000 (-0700) Subject: Fix bug re noninteractive multithreaded memory allocation. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1964 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8f43ce497c3fcd76d0d3be2d8a0506c53c757fb3;p=emacs.git Fix bug re noninteractive multithreaded memory allocation. * emacs.c (malloc_enable_thread): Hoist extern decl to top level. (main) [HAVE_PTHREAD && !SYSTEM_MALLOC && !DOUG_LEA_MALLOC]: Invoke malloc_enable_thread even when not interactive. Problem reported by Ken Brown in . * process.c (init_process_emacs) [CYGWIN]: Tickle glib even in this case, since the underlying bug has now been fixed. --- diff --git a/src/ChangeLog b/src/ChangeLog index 23e9502e3b5..061083af6cd 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2013-07-01 Paul Eggert + + Fix bug re noninteractive multithreaded memory allocation (Bug#14569). + * emacs.c (malloc_enable_thread): Hoist extern decl to top level. + (main) [HAVE_PTHREAD && !SYSTEM_MALLOC && !DOUG_LEA_MALLOC]: + Invoke malloc_enable_thread even when not interactive. + Problem reported by Ken Brown in . + * process.c (init_process_emacs) [CYGWIN]: Tickle glib even + in this case, since the underlying bug has now been fixed. + 2013-07-01 Juanma Barranquero * emacs.c (Fkill_emacs): Expand Vauto_save_list_file_name before diff --git a/src/emacs.c b/src/emacs.c index 77ae977b37c..08be786de95 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -127,6 +127,8 @@ extern int malloc_set_state (void*); /* True if the MALLOC_CHECK_ environment variable was set while dumping. Used to work around a bug in glibc's malloc. */ static bool malloc_using_checking; +#elif defined HAVE_PTHREAD && !defined SYSTEM_MALLOC +extern void malloc_enable_thread (void); #endif Lisp_Object Qfile_name_handler_alist; @@ -1074,13 +1076,8 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem #endif /* DOS_NT */ } -#if defined (HAVE_PTHREAD) && !defined (SYSTEM_MALLOC) && !defined (DOUG_LEA_MALLOC) - if (! noninteractive) - { - extern void malloc_enable_thread (void); - - malloc_enable_thread (); - } +#if defined HAVE_PTHREAD && !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC + malloc_enable_thread (); #endif init_signals (dumping); diff --git a/src/process.c b/src/process.c index b63a985fcec..5fe07a9c4fa 100644 --- a/src/process.c +++ b/src/process.c @@ -7095,15 +7095,11 @@ init_process_emacs (void) if (! noninteractive || initialized) #endif { -#if defined HAVE_GLIB && !defined WINDOWSNT && !defined CYGWIN +#if defined HAVE_GLIB && !defined WINDOWSNT /* Tickle glib's child-handling code. Ask glib to wait for Emacs itself; this should always fail, but is enough to initialize glib's - private SIGCHLD handler, allowing the code below to copy it into - LIB_CHILD_HANDLER. - - For some reason tickling causes Cygwin bootstrap to fail, so it's - skipped under Cygwin. FIXME: Skipping the tickling likely causes - bugs in subprocess handling under Cygwin (Bug#14569). */ + private SIGCHLD handler, allowing catch_child_signal to copy + it into lib_child_handler. */ g_source_unref (g_child_watch_source_new (getpid ())); #endif catch_child_signal ();