bug-glibc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: XEmacs 21.4.10 crashes with glibc 2.3.1


From: Wolfram Gloger
Subject: Re: XEmacs 21.4.10 crashes with glibc 2.3.1
Date: 6 Nov 2002 23:44:25 -0000

> Wrong type argument: vectorp, #<INTERNAL OBJECT (XEmacs bug?)
>                      (symbol-value-forward type 7444) 0x40198008>
> xemacs exiting

Sigh, it looks like support for glibc's / "Doug Lea"'s malloc wasn't
properly merged in XEmacs.  You really want to disable mmapped chunks
_only_ for allocation of Lisp Objects, i.e. where pointers become
tagged.  As a workaround, I've disabled use of mmap completely in the
patch below.

N.B. the exact same problem should/could show up with earlier glibc
releases, but maybe the allocation pattern was slightly different.

If the patch below works for you, I can try to come up with something
less drastic later.

Regards,
Wolfram.

--- src/alloc.c.orig    Mon Dec 17 06:49:22 2001
+++ src/alloc.c Thu Nov  7 00:27:31 2002
@@ -3882,8 +3890,8 @@
 #ifdef DOUG_LEA_MALLOC
   mallopt (M_TRIM_THRESHOLD, 128*1024); /* trim threshold */
   mallopt (M_MMAP_THRESHOLD, 64*1024); /* mmap threshold */
-#if 0 /* Moved to emacs.c */
-  mallopt (M_MMAP_MAX, 64); /* max. number of mmap'ed areas */
+#if 1 /* Moved to emacs.c */
+  mallopt (M_MMAP_MAX, 0); /* max. number of mmap'ed areas */
 #endif
 #endif
   init_string_alloc ();
--- src/emacs.c.orig    Thu Oct 31 16:07:36 2002
+++ src/emacs.c Thu Nov  7 00:25:47 2002
@@ -2713,7 +2713,8 @@
   if (!initialized)
     {
 #ifdef DOUG_LEA_MALLOC
-      mallopt (M_MMAP_MAX, 0);
+      if (mallopt (M_MMAP_MAX, 0) != 1)
+       abort();
 #endif
       run_temacs_argc = 0;
       if (! SETJMP (run_temacs_catch))
@@ -2770,7 +2771,8 @@
     defined(_NO_MALLOC_WARNING_) || \
     (defined(__GLIBC__) && __GLIBC_MINOR__ < 1 && !defined(MULE)) || \
     defined(DEBUG_DOUG_LEA_MALLOC)
-      mallopt (M_MMAP_MAX, 64);
+      if(mallopt (M_MMAP_MAX, 0) != 1)
+       abort();
 #endif
 #ifdef REL_ALLOC
       r_alloc_reinit ();







reply via email to

[Prev in Thread] Current Thread [Next in Thread]