From 1ce5cd04df32ebdd269709de23feb5493458173c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 3 Jul 2013 17:53:13 -0700 Subject: [PATCH] Try to fix FreeBSD bug re multithreaded memory allocation. * src/emacs.c (main) [HAVE_PTHREAD && !SYSTEM_MALLOC && !DOUG_LEA_MALLOC]: Clear _malloc_thread_enabled_p at startup. Reported by Ashish SHUKLA in . Fixes: debbugs:14569 --- src/ChangeLog | 7 +++++++ src/emacs.c | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/ChangeLog b/src/ChangeLog index 322b8271f14..5391cefe876 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2013-07-04 Paul Eggert + + Try to fix FreeBSD bug re multithreaded memory allocation (Bug#14569). + * emacs.c (main) [HAVE_PTHREAD && !SYSTEM_MALLOC && !DOUG_LEA_MALLOC]: + Clear _malloc_thread_enabled_p at startup. Reported by Ashish SHUKLA in + . + 2013-07-02 Paul Eggert * sysdep.c (sys_siglist) [HAVE_DECL___SYS_SIGLIST]: diff --git a/src/emacs.c b/src/emacs.c index 08be786de95..bebc5e420ad 100644 --- a/src/emacs.c +++ b/src/emacs.c @@ -128,6 +128,7 @@ 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 @@ -681,6 +682,12 @@ 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"); -- 2.11.4.GIT