fix: recompute tracked owned deriveds after owner teardown#18513
Open
momomuchu wants to merge 1 commit into
Open
fix: recompute tracked owned deriveds after owner teardown#18513momomuchu wants to merge 1 commit into
momomuchu wants to merge 1 commit into
Conversation
|
Install the latest version of pnpm add https://pkg.svelte.dev/svelte/c/60bed83391b41f6d7fd52aa4d21c1b4de7003630Open in Note This PR is from a fork. A maintainer must approve approve each commit before it can be built and installed. |
🦋 Changeset detectedLatest commit: 60bed83 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
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.
Summary
This fixes a stale read from a class field
$derivedafter the effect that originally owned it is destroyed.In the failing case, a class instance is created inside a render effect. Its derived field is read while that effect is alive, then the effect is destroyed. After the source state changes from
BtoC, reading the derived should returnCC, but it returned the cachedBB.Root cause
execute_derivedtreated every initialized derived with a destroyed or inert parent as inert. That returned the cached value and emittedderived_inert, even when the derived had already been tracked by the reactive graph.Fix
The destroyed owner branch now checks the derived read version.
When
rv === 0, the derived was never tracked by a reaction, so the existing inert warning and cached return behavior is preserved.When
rv !== 0, the derived was genuinely tracked before. It recomputes with no active parent, so the read is fresh without reconnecting to the destroyed effect.Tests
Focused signals regression test passed in legacy mode and runes mode.
Signals suite passed with 108 passed and 0 failed.
Store plus runtime production suite passed with 47 passed and 0 failed.
Server side rendering suite passed with 32 passed and 0 failed.
Runtime runes plus runtime legacy suite passed with 5935 passed and 0 failed.
Package typecheck passed. ESLint passed for the touched runtime source. A changeset is included.
Closes #18489