[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump)
From: |
YAMAMOTO Mitsuharu |
Subject: |
Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump) |
Date: |
Mon, 06 Aug 2007 17:47:55 +0900 |
User-agent: |
Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.1.50 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI) |
>>>>> On Wed, 01 Aug 2007 20:27:06 +0200, "Jan D." <address@hidden> said:
> I tried it and temacs runs OK. However, it seems that the mutex
> initialization is lost, so it has to be done again with the dumped
> emacs. pthread_self also allocates memory, so even if this is fixed
> we still get a loop.
How about deferring mutex initializations until an interactive session
starts? Could you try the patch below?
> I also tried using system malloc on FreeBSD 6.2, but that didn't
> work. Emacs crashed on first realloc (heap corrupt). I guess
> undumping on FreeBSD with system malloc is broken (or perhaps
> impossible).
Too bad...
YAMAMOTO Mitsuharu
address@hidden
Index: src/emacs.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/emacs.c,v
retrieving revision 1.404
diff -c -p -r1.404 emacs.c
*** src/emacs.c 26 Jul 2007 05:27:51 -0000 1.404
--- src/emacs.c 6 Aug 2007 08:40:40 -0000
*************** main (argc, argv
*** 1164,1169 ****
--- 1164,1176 ----
setpgrp ();
#endif
#endif
+ #if defined (HAVE_GTK_AND_PTHREAD) && !defined (SYSTEM_MALLOC) && !defined
(DOUG_LEA_MALLOC)
+ {
+ extern void malloc_enable_thread P_ ((void));
+
+ malloc_enable_thread ();
+ }
+ #endif
}
init_signals ();
Index: src/gmalloc.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/gmalloc.c,v
retrieving revision 1.24
diff -c -p -r1.24 gmalloc.c
*** src/gmalloc.c 29 Jul 2007 10:12:21 -0000 1.24
--- src/gmalloc.c 6 Aug 2007 08:40:40 -0000
*************** extern __ptr_t memalign PP ((__malloc_si
*** 136,141 ****
--- 136,145 ----
extern __ptr_t valloc PP ((__malloc_size_t __size));
#endif
+ #ifdef USE_PTHREAD
+ /* Set up mutexes and make malloc etc. thread-safe. */
+ extern void malloc_enable_thread PP ((void));
+ #endif
#ifdef _MALLOC_INTERNAL
*************** extern void _free_internal_nolock PP ((_
*** 242,249 ****
#ifdef USE_PTHREAD
extern pthread_mutex_t _malloc_mutex, _aligned_blocks_mutex;
! #define LOCK() pthread_mutex_lock (&_malloc_mutex)
! #define UNLOCK() pthread_mutex_unlock (&_malloc_mutex)
#define LOCK_ALIGNED_BLOCKS() pthread_mutex_lock (&_aligned_blocks_mutex)
#define UNLOCK_ALIGNED_BLOCKS() pthread_mutex_unlock
(&_aligned_blocks_mutex)
#else
--- 246,260 ----
#ifdef USE_PTHREAD
extern pthread_mutex_t _malloc_mutex, _aligned_blocks_mutex;
! extern int _malloc_thread_enabled_p;
! #define LOCK() \
! do { \
! if (_malloc_thread_enabled_p) pthread_mutex_lock (&_malloc_mutex); \
! } while (0)
! #define UNLOCK() \
! do { \
! if (_malloc_thread_enabled_p) pthread_mutex_unlock (&_malloc_mutex); \
! } while (0)
#define LOCK_ALIGNED_BLOCKS() pthread_mutex_lock (&_aligned_blocks_mutex)
#define UNLOCK_ALIGNED_BLOCKS() pthread_mutex_unlock
(&_aligned_blocks_mutex)
#else
*************** register_heapinfo ()
*** 563,568 ****
--- 574,596 ----
#ifdef USE_PTHREAD
pthread_mutex_t _malloc_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t _aligned_blocks_mutex = PTHREAD_MUTEX_INITIALIZER;
+ int _malloc_thread_enabled_p;
+
+ /* Set up mutexes and make malloc etc. thread-safe. */
+ void
+ malloc_enable_thread ()
+ {
+ if (_malloc_thread_enabled_p)
+ return;
+
+ /* Some pthread implementations call malloc for statically
+ initialized mutexes when they are used first. To avoid such a
+ situation, we initialize mutexes here while their use is
+ disabled in malloc etc. */
+ pthread_mutex_init (&_malloc_mutex, NULL);
+ pthread_mutex_init (&_aligned_blocks_mutex, NULL);
+ _malloc_thread_enabled_p = 1;
+ }
#endif
static void
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), YAMAMOTO Mitsuharu, 2007/08/01
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), Jan Djärv, 2007/08/01
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), YAMAMOTO Mitsuharu, 2007/08/01
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), YAMAMOTO Mitsuharu, 2007/08/01
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), YAMAMOTO Mitsuharu, 2007/08/01
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), Jan Djärv, 2007/08/01
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), Jan Djärv, 2007/08/01
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), Miles Bader, 2007/08/01
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), Jan D., 2007/08/01
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump),
YAMAMOTO Mitsuharu <=
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), YAMAMOTO Mitsuharu, 2007/08/06
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), Herbert J. Skuhra, 2007/08/06
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), Ryan Yeske, 2007/08/06
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), Jan Djärv, 2007/08/07
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), YAMAMOTO Mitsuharu, 2007/08/07
- Re: emacs-unicode-2 bootstrap on FreeBSD (temacs coredump), Jan Djärv, 2007/08/01