[BUGFIX] Fix willDestroy
on class helpers
#18837
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.
Class based helpers were having
willDestroy
be called twice, once bythe Glimmer VM's built-in destroyables implementation, and once
scheduled by
destroy
(which is the correct destruction). This isbecause we were registering the class itself directly as the
destroyable, and Glimmer VM detected the
willDestroy
function on itand called it eagerly.
This fix creates an intermediate destructor object with a
destroy()
hook, but long term we need to finish the refactors to destroyables in
the VM and make it so these types of collisions can't happen again.
Added a basic lifecycle test for helpers to prevent this specific issue
from reoccuring.
Fixes #18830