seastar allocator causes infinite recursive call if seastar is compiled as a shared library
envgap__scylladb__seastar-2247
01 / FAILURE SIGNATURE
As reported upstream
No identifying execution failure has been captured.
Not a benchmark task.
- In a clean container the reported failure did not reproduce, or the known fix did not make the project run.
02 / ENVIRONMENT RECIPE
- Base commit
855fc4b401ee17498fc10531a4117ab02be24bfe- Manifest
CMakeLists.txt- Reproduce
Awaiting issue-specific recipe- Run under trace
Awaiting a meaningful runtime command
03 / ORIGINAL ISSUE TEXT
scylladb/seastar #2247 · read the original issue
this can be reproduced with: ```console $ ./configure.py --mode dev $ ninja -C build/dev test_unit_tls $ build/dev/tests/unit/tls_test Running 31 test cases... INFO 2024-05-17 13:44:00,704 seastar - Reactor backend: io_uring INFO 2024-05-17 13:44:00,707 seastar - Perf-based stall detector creation failed (EACCESS), try setting /proc/sys/kernel/perf_event_paranoid to 1 or less to enable kernel backtraces: falling back to posix timer. random-seed=4026002337 Segmentation fault (core dumped) ``` on fedora 40. the backtrace looks like: ``` #47271 0x00007ffff7fdb754 in update_get_addr (ti=0x7ffff7dbf288, gen=<optimized out>) at ../elf/dl-tls.c:916 #47272 0x00007ffff7fde4ec in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55 #47273 0x00007ffff7ac12a0 in free () from /home/kefu/dev/seastar/build/dev/libseastar.so #47274 0x00007ffff7fdb67b in free (ptr=<optimized out>) at ../include/rtld-malloc.h:50 #47275 _dl_update_slotinfo (req_modid=2, new_gen=2) at ../elf/dl-tls.c:822 #47276 0x00007ffff7fdb754 in update_get_addr (ti=0x7ffff7dbf288, gen=<optimized out>) at ../elf/dl-tls.c:916 #47277 0x00007ffff7fde4ec in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55 #47278 0x00007ffff7ac12a0 in free () from /home/kefu/dev/seastar/build/dev/libseastar.so #47279 0x00007ffff7fdb67b in free (ptr=<optimized out>) at ../include/rtld-malloc.h:50 #47280 _dl_update_slotinfo (req_modid=2, new_gen=2) at ../elf/dl-tls.c:822 #47281 0x00007ffff7fdb754 in update_get_addr (ti=0x7ffff7dbf288, gen=<optimized out>) at ../elf/dl-tls.c:916 #47282 0x00007ffff7fde4ec in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55 #47283 0x00007ffff7ac12a0 in free () from /home/kefu/dev/seastar/build/dev/libseastar.so #47284 0x00007ffff7fdb67b in free (ptr=<optimized out>) at ../include/rtld-malloc.h:50 #47285 _dl_update_slotinfo (req_modid=2, new_gen=2) at ../elf/dl-tls.c:822 #47286 0x00007ffff7fdb754 in update_get_addr (ti=0x7ffff7dbf288, gen=<optimized out>) at ../elf/dl-tls.c:916 #47287 0x00007ffff7fde4ec in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55 #47288 0x00007ffff7ac12a0 in free () from /home/kefu/dev/seastar/build/dev/libseastar.so #47289 0x00007ffff7fdb67b in free (ptr=<optimized out>) at ../include/rtld-malloc.h:50 #47290 _dl_update_slotinfo (req_modid=2, new_gen=2) at ../elf/dl-tls.c:822 #47291 0x00007ffff7fdb754 in update_get_addr (ti=0x7ffff7dbf288, gen=<optimized out>) at ../elf/dl-tls.c:916 #47292 0x00007ffff7fde4ec in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55 #47293 0x00007ffff7ac12a0 in free () from /home/kefu/dev/seastar/build/dev/libseastar.so #47294 0x00007ffff7fdb67b in free (ptr=<optimized out>) at ../include/rtld-malloc.h:50 #47295 _dl_update_slotinfo (req_modid=2, new_gen=2) at ../elf/dl-tls.c:822 #47296 0x00007ffff7fdb754 in update_get_addr (ti=0x7ffff7dbf288, gen=<optimized out>) at ../elf/dl-tls.c:916 #47297 0x00007ffff7fde4ec in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55 #47298 0x00007ffff7ac12a0 in free () from /home/kefu/dev/seastar/build/dev/libseastar.so #47299 0x00007ffff7fdb67b in free (ptr=<optimized out>) at ../include/rtld-malloc.h:50 #47300 _dl_update_slotinfo (req_modid=2, new_gen=2) at ../elf/dl-tls.c:822 #47301 0x00007ffff7fdb754 in update_get_addr (ti=0x7ffff7dbf288, gen=<optimized out>) at ../elf/dl-tls.c:916 #47302 0x00007ffff7fde4ec in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55 #47303 0x00007ffff7b2641f in seastar::reactor::service_highres_timer() () from /home/kefu/dev/seastar/build/dev/libseastar.so #47304 0x00007ffff7a8fff5 in seastar::reactor_backend_uring::hrtimer_completion::complete_with(long) () from /home/kefu/dev/seastar/build/dev/libseastar.so #47305 0x00007ffff7a8f0c4 in seastar::reactor_backend_uring::wait_and_process_events(__sigset_t const*) () from /home/kefu/dev/seastar/build/dev/libseastar.so #47306 0x00007ffff7b273ca in seastar::reactor::do_run() () from /home/kefu/dev/seastar/build/dev/libseastar.so #47307 0x00007ffff7b43118 in std::_Function_handler<void (), seastar::smp::configure(seastar::smp_options const&, seastar::reactor_options const&)::$_0>::_M_invoke(std::_Any_data const&) () from /home/kefu/dev/seastar/build/dev/libseastar.so #47308 0x00007ffff7adb2cb in seastar::posix_thread::start_routine(void*) () from /home/kefu/dev/seastar/build/dev/libseastar.so #47309 0x00007ffff72a91b7 in start_thread () from /lib64/libc.so.6 #47310 0x00007ffff732b39c in clone3 () from /lib64/libc.so.6 ``` it looks like an issue in glibc's TLS support. and it seems that there is a patch trying to address this, see https://patchwork.ozlabs.org/project/glibc/patch/8734v1ieke.fsf@oldenburg.str.redhat.com/ . but at the moment of writing, the patch has not landed on upstream's master branch (https://sourceware.org/git/?p=glibc.git).
04 / LABELS
Labels from the report text only; not yet run
No supported category has been assigned.
Label rules and the text that matched
[]