-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Destruct ConptyConnection on a background thread #7575
Conversation
This commit leverages C++/WinRT's final_release [extension point] to pull the final destruction of ConptyConnection off onto a background thread. We've been seeing some deadlocks during teardown where the output thread (holding the last owning reference to the connection) was trying to destruct the threadpool wait while the threadpool wait was simultaneously running its callback and waiting for the output thread to terminate. It turns out that trying to release a threadpool wait while it's running a callback that's blocked on you will absolutely result in a deadlock. Fixes #7392. [extension point]: https://devblogs.microsoft.com/oldnewthing/20191018-00
@msftbot merge this in 1 minute |
Hello @DHowett! Because you've given me some instructions on how to help merge this pull request, I'll be modifying my merge approach. Here's how I understand your requirements for merging this pull request:
If this doesn't seem right to you, you can tell me to cancel these instructions and use the auto-merge policy that has been configured for this repository. Try telling me "forget everything I just told you". |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, ok. Looks like the right magic to me.
This commit leverages C++/WinRT's final_release [extension point] to pull the final destruction of ConptyConnection off onto a background thread. We've been seeing some deadlocks during teardown where the output thread (holding the last owning reference to the connection) was trying to destruct the threadpool wait while the threadpool wait was simultaneously running its callback and waiting for the output thread to terminate. It turns out that trying to release a threadpool wait while it's running a callback that's blocked on you will absolutely result in a deadlock. Fixes #7392. [extension point]: https://devblogs.microsoft.com/oldnewthing/20191018-00/?p=103010 (cherry picked from commit 27f7ce7)
🎉 Handy links: |
🎉 Handy links: |
This commit leverages C++/WinRT's final_release extension point to
pull the final destruction of ConptyConnection off onto a background
thread.
We've been seeing some deadlocks during teardown where the output thread
(holding the last owning reference to the connection) was trying to
destruct the threadpool wait while the threadpool wait was
simultaneously running its callback and waiting for the output thread to
terminate. It turns out that trying to release a threadpool wait while
it's running a callback that's blocked on you will absolutely result in
a deadlock.
Fixes #7392.