diff options
author | Danny Lin <danny@kdrag0n.dev> | 2021-04-07 01:32:19 -0700 |
---|---|---|
committer | Danny Lin <danny@kdrag0n.dev> | 2021-04-07 01:59:47 -0700 |
commit | ad2fa2bf6f737ba5b8d86716dc96375e8aa56db7 (patch) | |
tree | 778caa0a62d428367d9683395bfdb56a651bee89 /doc/mimalloc-doc.h | |
parent | 985f313b35bc709aaa15d0f01867f857923c2ca6 (diff) |
Fix thread ID getter on Android ARM/AArch64
Android's Bionic libc stores the thread ID in TLS slot 1 instead of 0
on 32-bit ARM and AArch64. Slot 0 contains a pointer to the ELF DTV
(Dynamic Thread Vector) instead, which is constant for each loaded DSO.
Because mimalloc uses the thread ID to determine whether operations are
thread-local or cross-thread (atomic), all threads having the same ID
causes internal data structures to get corrupted quickly when multiple
threads are using the allocator:
mimalloc: assertion failed: at "external/mimalloc/src/page.c":563, mi_page_extend_free
assertion: "page->local_free == NULL"
mimalloc: assertion failed: at "external/mimalloc/src/page.c":74, mi_page_is_valid_init
assertion: "page->used <= page->capacity"
mimalloc: assertion failed: at "external/mimalloc/src/page.c":100, mi_page_is_valid_init
assertion: "page->used + free_count == page->capacity"
mimalloc: assertion failed: at "external/mimalloc/src/page.c":74, mi_page_is_valid_init
assertion: "page->used <= page->capacity"
Add support for Android's alternate TLS layout to fix the crashes in
multi-threaded use cases.
Fixes #376.
Diffstat (limited to 'doc/mimalloc-doc.h')
0 files changed, 0 insertions, 0 deletions