This only changes behavior for the tsd_generic path, where
pthread_getspecific() can report no TSD after the pthread key destructor
has finished. Other TSD backends keep tsd_teardown_done() as a constant
false, so the added checks compile out there.
Avoid recreating TSD for late deallocations. Preserve existing
reincarnation behavior for late allocations and nonzero reallocations.
Add Linux CI coverage for force_tls=0, with and without --enable-debug,
to exercise the Android-equivalent generic TSD path.
The `tcache_fiber_migration` reproducer only exercises the bug when the
allocator is statically linked and inlined under whole-program LTO. None of the
existing lanes build that way, so add a dedicated Linux lane: clang ThinLTO,
`--with-jemalloc-prefix=je_`, and llvm-ar/nm/ranlib (to archive the LTO bitcode)
+ `-fuse-ld=lld`, then `make check`.
Authored in scripts/gen_gh_actions.py; .github/workflows/linux-ci.yml
regenerated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>