ThreadManager: Improve waitable destruction #15472
Merged
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.
I can't reproduce the crash with the stress test unfortunately (see #15470), but this change is a slight optimization.
This makes
WaitFor(0)
lock-free, and reduces property access at the end of WaitFor. Unfortunately, it's still accessing within the predicate, which could in theory be after the destructor. I thought about relocking afterward, but it doesn't really solve that case.Instead, I changed the texture replacement to lock on releasing the waitable, and only release it on destruct. It'll remember it's triggered, so this just means the waitable objects live longer. But I think this most completely closes the destruct gap.
-[Unknown]