Wrap COM_OBJECTS in ManuallyDrop to prevent crash during TLS teardown#110
Open
yuyoyuppe wants to merge 1 commit intoCiantic:rustfrom
Open
Wrap COM_OBJECTS in ManuallyDrop to prevent crash during TLS teardown#110yuyoyuppe wants to merge 1 commit intoCiantic:rustfrom
yuyoyuppe wants to merge 1 commit intoCiantic:rustfrom
Conversation
During process exit, Rust TLS destructors fire after combase.dll's own thread-local state has been torn down. IUnknown::Release on the cached COM proxies then crashes in combase!TLSAddToMap. Wrapping the thread_local in ManuallyDrop suppresses the destructor entirely, safely leaking the objects. The OS reclaims all memory at process exit and the COM server detects dead clients via OXID pings.
Owner
|
Hmm, this seems fine, I will see when I have time to check and merge, I haven't seen it crash on my apps though. |
Author
|
I have it 100% of the time on both of my 25H2 machines. Note that it happens late in the process deinit routine, so if you're unloading a .dll with VDA, you won't experience it. |
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.
Description
During process exit, Rust TLS destructors fire after combase.dll's own thread-local state has been torn down. IUnknown::Release on the cached COM proxies then crashes in combase!TLSAddToMap. Wrapping the thread_local in ManuallyDrop suppresses the destructor entirely, safely leaking the objects. The OS reclaims all memory at process exit and the COM server detects dead clients via OXID pings.
Crash rerpo
You can easily reproduce the issue if you do something like this:
And launch it from windbg: