Emacs dired problem triggered by NPTL-enabled glibc

David Mosberger davidm@napali.hpl.hp.com
Tue Dec 16 20:02:00 GMT 2003


On Debian/testing, I noticed that I can no longer load a directory via
dired.  The root-cause of the problem appears to be that Emacs uses
setrlimit() to set RLIMIT_STACK.  This limit won't be
page-size-aligned in general.  As a result, whenever Emacs ends up
spawning a subprocess for an executable that uses NPTL, the subprocess
fails with an error like this:

  init.c:259: __pthread_initialize_minimal_internal: Assertion `__default_stacksize % __sysconf (_SC_PAGESIZE) == 0' failed.

__default_stacksize is initialized like this:

 #ifdef NEED_SEPARATE_REGISTER_STACK
   __default_stacksize = MAX (limit.rlim_cur / 2, PTHREAD_STACK_MIN);
 #else
   __default_stacksize = MAX (limit.rlim_cur, PTHREAD_STACK_MIN);
 #endif

An easy workaround is to start Emacs with LD_ASSUME_KERNEL=2.4.18.

As far as I know, there is no requirement that the RLIMIT_STACK limit
must be an integer-multiple of the page size (and certainly it doesn't
have an integer-multiple of _twice_ the page-size), so it would seem
to me that this is a bug in glibc?

	--david



More information about the Libc-hacker mailing list