Skip to content

workaround: MinGW thread_local use-after-free in ThreadContext#318

Open
ryanofsky wants to merge 1 commit into
bitcoin-core:masterfrom
ryanofsky:pr/win-tls
Open

workaround: MinGW thread_local use-after-free in ThreadContext#318
ryanofsky wants to merge 1 commit into
bitcoin-core:masterfrom
ryanofsky:pr/win-tls

Conversation

@ryanofsky

Copy link
Copy Markdown
Collaborator

Work around mingw bug thread_local bug https://sourceforge.net/p/mingw-w64/bugs/527/ that causes failures in windows "test cross-built" CI jobs in bitcoin/bitcoin#32387 by skipping thread_local destructors in mingw.

The workaround will result in resource leaks in mingw builds, that might be noticeable if a lot of threads are created and destroyed, but should not be a significant problem in practice.

This change is just a refactoring in other builds (including MSVC) not affected by this bug.

MinGW has a bug where thread_local destructors can run on already-freed memory
at thread exit, causing heap corruption. MSVC builds and non-Windows platforms
are unaffected.

This caused intermittent STATUS_HEAP_CORRUPTION in MinGW CI builds when
~ThreadContext walked freed memory at thread exit. See GThreadContext() in
proxy-io.h for the full explanation and upstream bug references.

Workaround: replace g_thread_context with a GThreadContext() accessor that on
MinGW returns a heap-allocated object held by a trivially-destructible pointer,
skipping destructor registration at thread exit. The object is deliberately leaked.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@DrahtBot

DrahtBot commented Jul 22, 2026

Copy link
Copy Markdown

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Reviews

See the guideline and AI policy for information on the review process.
A summary of reviews will appear here.

ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Jul 23, 2026
Use new CurrentThread function to be compatible with windows mingw bug
workaround bitcoin-core/libmultiprocess#318
@ryanofsky

Copy link
Copy Markdown
Collaborator Author

Updated 1243dd3 -> 1500701 (pr/win-tls.1 -> pr/win-tls.2, compare) renaming GThreadContext to CurrentThread

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants