Fix mimalloc init crash when Windows TLS is exhausted#1202
Open
jinpzhanAMD wants to merge 1 commit intomicrosoft:dev3from
Open
Fix mimalloc init crash when Windows TLS is exhausted#1202jinpzhanAMD wants to merge 1 commit intomicrosoft:dev3from
jinpzhanAMD wants to merge 1 commit intomicrosoft:dev3from
Conversation
daanx
added a commit
that referenced
this pull request
Jan 31, 2026
Collaborator
|
Hi @jinpzhanAMD -- thanks again for putting in the work on this PR! The original code was indeed counting on not more than 64 TlsAlloc's and that is clearly too low a limit. I looked at the PR but we need to write this code quite carefully as it is all meant to improve the fast path over regular thread_local variables. I pushed a commit that now uses the Tls expansion slots when needed and this should work up to 1088 TlsAlloc's (which is the maximum anyway). I think this will also address your other PR with the recursive initialization: that was an artifact of the initial limit as the initial slot was now containing an abritrary value instead of NULL. Let me know how it goes! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR fixes a startup crash in the bundled mimalloc on Windows observed in TLS-slot-heavy processes. The crash occurred during mimalloc initialization when allocating “fast TLS user slots”.
Problem
mimalloc’s Windows fast-path TLS model relies on directly accessing the TEB TlsSlots[64] array. Current implementation assumed TlsAlloc() would return a TLS index that fits into the first 63 entries.
In environments where many DLLs/layers already consume TLS indices, TlsAlloc() returns an index >= 63, which cannot be addressed via the TEB's fixed 64-slot array, resulted in _mi_error_message(EFAULT, ...), causing a crash during mimalloc initialization.
Solution
Behavioral impact
Prevents mimalloc initialization from aborting in TLS-index-constrained processes.
Preserves the fast path when possible; uses progressively safer fallbacks only when required.
Expected minor performance impact only in the fallback modes.