Fix memory leak in ApplicationShell#activateWidget #10570
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.
What it does
The
ApplicationShell#activateWidget
methodawait
s aPromise
returned byApplicationShell#waitForActivation
, but thatPromise
is not guaranteed to be settled. In particular, if the widget in question fails to accept focus within 2 seconds, it will not be set as theApplicationShell
'sactiveWidget
. Because of that, a call toactivateWidget
can hang indefinitely, and thePromise
handlers retain references to the widget that was to be activated even if that widget is later closed.This code ensures that the
Promise
returned bywaitForActivation
will settle so thatactivateWidget
will run to completion.How to test
onActivateRequest
invsx-extensions-view-container.tsx
.View
menu.VSXExtensionsViewContainer
That chain indicates that the view container is being retained (in part) because of the promise in
ApplicationShell#activateWidget
.Review checklist
Reminder for reviewers