Closed
Description
jemalloc's malloc implementation hangs under Spindle, which is the cause of the chapel test timeout in the E4S testsuite. Chapel defaults to using jemalloc unless another malloc is specified by the env var CHPL_TARGET_MEM.
The problem can be reproduced in the serial CI container as follows:
spindleuser@spindlenode:~$ sudo apt install libjemalloc-dev
[...]spindleuser@spindlenode:~$ cat test.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
void * p = malloc(1);
printf("OK\n");
return 0;
}spindleuser@spindlenode:~$ gcc -o test_system_malloc test.c
spindleuser@spindlenode:~$ gcc -o test_jemalloc test.c -ljemalloc
spindleuser@spindlenode:~$ timeout -v 30 ./test_system_malloc
OK
spindleuser@spindlenode:~$ timeout -v 30 ./test_jemalloc
OK
spindleuser@spindlenode:~$ timeout -v 30 spindle ./test_system_malloc
OK
spindleuser@spindlenode:~$ timeout -v 30 spindle ./test_jemalloc
timeout: sending signal TERM to command 'spindle'Backtrace:
#0 futex_wait (private=0, expected=2, futex_word=0x7fd4d30a5680 <init_lock+64>) at ../sysdeps/nptl/futex-internal.h:146
#1 __GI___lll_lock_wait (futex=futex@entry=0x7fd4d30a5680 <init_lock+64>, private=0) at ./nptl/lowlevellock.c:49
#2 0x00007fd4d2c5d1e1 in lll_mutex_lock_optimized (mutex=0x7fd4d30a5680 <init_lock+64>) at ./nptl/pthread_mutex_lock.c:48
#3 ___pthread_mutex_lock (mutex=0x7fd4d30a5680 <init_lock+64>) at ./nptl/pthread_mutex_lock.c:93
#4 0x00007fd4d2e5f138 in malloc_mutex_lock_final (mutex=0x7fd4d30a5640 <init_lock>) at include/jemalloc/internal/mutex.h:151
#5 je_malloc_mutex_lock_slow (mutex=0x7fd4d30a5640 <init_lock>) at src/mutex.c:90
#6 0x00007fd4d2def799 in malloc_mutex_lock (mutex=0x7fd4d30a5640 <init_lock>, tsdn=0x0) at include/jemalloc/internal/mutex.h:217
#7 malloc_init_hard () at src/jemalloc.c:2124
#8 0x00007fd4d2df3885 in malloc_init () at src/jemalloc.c:298
#9 imalloc_init_check (dopts=<synthetic pointer>, sopts=<synthetic pointer>) at src/jemalloc.c:2664
#10 imalloc (dopts=<optimized out>, sopts=<optimized out>) at src/jemalloc.c:2695
#11 je_malloc_default (size=8) at src/jemalloc.c:2728
#12 0x00007fd4d342dbde in malloc (size=<optimized out>) at ../include/rtld-malloc.h:56
#13 allocate_dtv_entry (size=<optimized out>, alignment=4) at ../elf/dl-tls.c:679
#14 allocate_and_init (map=0x7fd4d3416150) at ../elf/dl-tls.c:704
#15 tls_get_addr_tail (ti=0x7fd4d3409f78, dtv=0x7fd4d3416010, the_map=0x7fd4d3416150) at ../elf/dl-tls.c:904
#16 0x00007fd4d343185c in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55
#17 0x00007fd4d33da5d1 in check_for_new_thread () at /home/spindleuser/Spindle/src/client/subaudit/../auditclient/fixlocale.c:47
#18 0x00007fd4d33db6a5 in check_for_fork () at /home/spindleuser/Spindle/src/client/client/client.c:297
#19 0x00007fd4d33f5164 in readlink_wrapper (path=0x7fd4d2e87492 "/etc/malloc.conf", buf=0x7ffcea168090 "", bufsiz=4096) at /home/spindleuser/Spindle/src/client/client/intercept_readlink.c:64
#20 0x00007fd4d2de6d1d in readlink (__len=4096, __buf=0x7ffcea168090 "", __path=0x7fd4d2e87492 "/etc/malloc.conf") at /usr/include/x86_64-linux-gnu/bits/unistd.h:68
#21 obtain_malloc_conf (buf=<optimized out>, which_source=<optimized out>) at src/jemalloc.c:1028
#22 malloc_conf_init_helper (sc_data=sc_data@entry=0x0, bin_shard_sizes=bin_shard_sizes@entry=0x0, initial_call=initial_call@entry=true, opts_cache=opts_cache@entry=0x7ffcea167fd0, buf=buf@entry=0x7ffcea168090 "") at src/jemalloc.c:1091
#23 0x00007fd4d2ded0fb in malloc_conf_init (bin_shard_sizes=0x7ffcea168000, sc_data=0x7ffcea1690a0) at src/jemalloc.c:1756
#24 malloc_init_hard_a0_locked () at src/jemalloc.c:1822
#25 0x00007fd4d2def373 in malloc_init_hard () at src/jemalloc.c:2135
#26 0x00007fd4d2df3885 in malloc_init () at src/jemalloc.c:298
#27 imalloc_init_check (dopts=<synthetic pointer>, sopts=<synthetic pointer>) at src/jemalloc.c:2664
#28 imalloc (dopts=<optimized out>, sopts=<optimized out>) at src/jemalloc.c:2695
#29 je_malloc_default (size=73728) at src/jemalloc.c:2728
#30 0x00007fd4d290d38f in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
#31 0x00007fd4d341f71f in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7ffcea16adc8, env=env@entry=0x7ffcea16add8) at ./elf/dl-init.c:74
#32 0x00007fd4d341f824 in call_init (env=<optimized out>, argv=<optimized out>, argc=<optimized out>, l=<optimized out>) at ./elf/dl-init.c:120
#33 _dl_init (main_map=0x7fd4d34532e0, argc=1, argv=0x7ffcea16adc8, env=0x7ffcea16add8) at ./elf/dl-init.c:121
#34 0x00007fd4d34395a0 in _dl_start_user () from /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
#35 0x0000000000000001 in ?? ()
#36 0x00007ffcea16c607 in ?? ()
#37 0x0000000000000000 in ?? ()Metadata
Metadata
Assignees
Labels
No labels
Activity
nchaimov commentedon Oct 2, 2026
Debug log: spindle_output.spindlenode.1750.txt