]> git.eshelyaron.com Git - emacs.git/commitdiff
Try again to fix FreeBSD bug re multithreaded memory alloc.
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 4 Jul 2013 06:20:55 +0000 (23:20 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 4 Jul 2013 06:20:55 +0000 (23:20 -0700)
* emacs.c (main) [HAVE_PTHREAD && !SYSTEM_MALLOC && !DOUG_LEA_MALLOC]:
Do not clear _malloc_thread_enabled_p, undoing the previous change,
which did not work (see <http://bugs.gnu.org/14569#307>).
(main): Do not invoke malloc_enable_thread if (! CANNOT_DUMP
&& (!noninteractive || initialized)).  This attempts to thread
the needle between the Scylla of FreeBSD and the Charybdis of Cygwin.

src/ChangeLog
src/emacs.c

index f8d54c7fb034aa00c2aa8f4b54168c7448ad6985..1bd535730868df40ac619f5d0719f95570695d04 100644 (file)
@@ -1,3 +1,13 @@
+2013-07-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Try again to fix FreeBSD bug re multithreaded memory alloc (Bug#14569).
+       * emacs.c (main) [HAVE_PTHREAD && !SYSTEM_MALLOC && !DOUG_LEA_MALLOC]:
+       Do not clear _malloc_thread_enabled_p, undoing the previous change,
+       which did not work (see <http://bugs.gnu.org/14569#307>).
+       (main): Do not invoke malloc_enable_thread if (! CANNOT_DUMP
+       && (!noninteractive || initialized)).  This attempts to thread
+       the needle between the Scylla of FreeBSD and the Charybdis of Cygwin.
+
 2013-07-04  Juanma Barranquero  <lekktu@gmail.com>
 
        * image.c (x_to_xcolors) [HAVE_NTGUI]: Remove unused var `hdc'.
index bebc5e420add5f32a378f6aa30818a66422e165d..4b709527ff064cd3917ddb1c6e1bc1741e3fe36f 100644 (file)
@@ -128,7 +128,6 @@ extern int malloc_set_state (void*);
    dumping.  Used to work around a bug in glibc's malloc.  */
 static bool malloc_using_checking;
 #elif defined HAVE_PTHREAD && !defined SYSTEM_MALLOC
-extern int _malloc_thread_enabled_p;
 extern void malloc_enable_thread (void);
 #endif
 
@@ -682,12 +681,6 @@ main (int argc, char **argv)
   stack_base = &dummy;
 #endif
 
-#if defined HAVE_PTHREAD && !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC
-  /* Disable mutexes in gmalloc.c.  Otherwise, FreeBSD Emacs recursively
-     loops with pthread_mutex_lock calling calloc and vice versa.  */
-  _malloc_thread_enabled_p = 0;
-#endif
-
 #ifdef G_SLICE_ALWAYS_MALLOC
   /* This is used by the Cygwin build.  */
   xputenv ("G_SLICE=always-malloc");
@@ -1084,7 +1077,14 @@ Using an Emacs configured with --with-x-toolkit=lucid does not have this problem
     }
 
 #if defined HAVE_PTHREAD && !defined SYSTEM_MALLOC && !defined DOUG_LEA_MALLOC
-  malloc_enable_thread ();
+# ifndef CANNOT_DUMP
+  /* Do not make gmalloc thread-safe when creating bootstrap-emacs, as
+     that causes an infinite recursive loop with FreeBSD.  But do make
+     it thread-safe when creating emacs, otherwise bootstrap-emacs
+     fails on Cygwin.  See Bug#14569.  */
+  if (!noninteractive || initialized)
+# endif
+    malloc_enable_thread ();
 #endif
 
   init_signals (dumping);