WasapiWavePlayer: Don't explicitly remove the instance from the instances map in the destructor.#15754
Merged
Merged
Conversation
…nces map in the destructor.
seanbudd
approved these changes
Nov 7, 2023
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.
Link to issue number:
Fixes #15752.
Summary of the issue:
Some users sometimes see errors like this in their logs, accompanied by long freezes:
Description of user facing changes
NVDA no longer sometimes freezes when speaking a large amount of text.
Description of development approach
Previously, WasapiWavePlayer's
__del__method removed itself from the_instancesmap. However, a WeakValueDictionary actually removes the reference itself when the object dies. A weakref callback can run before__del__in some cases, which would mean that the item was already removed, resulting in this KeyError.To fix this, we just don't explicitly remove the item and rely entirely on WeakValueDictionary to do this.
Testing strategy:
I can't reproduce this, but @beqabeqa473 confirmed that this change seems to fix the issue.
Known issues with pull request:
None.
Code Review Checklist: