fix(signals): wake blocked readers after equal-value pending recovery - #3371
Conversation
🦋 Changeset detectedLatest commit: 4659711 The changes in this PR will be included in the next version bump. This PR includes changesets to release 11 packages
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 |
8a0f292 to
b9be897
Compare
The equal-value recovery loop retires every outgoing pending source from the dependents it orphaned. When that set holds the node itself (its own superseded flight, solidjs#3181), the wasPendingSource sweep below already runs settlePendingSource(el) — skip it in the loop rather than walk the dependents twice. Comment why the retryReaches early return in the settle closure does not mark the node visited (converging unchanged branches). Treeshake note updated to the measured 22,648. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Seven entries were 13–62 B brotli over after the +191 B minified core change (retryReaches core-retained, settlePendingSource's source parameter). Each cap carries the measured size and the prior cap. Co-authored-by: Cursor <cursoragent@cursor.com>
Coverage Report for CI Build 34587503635Warning No base build found for commit Coverage: 71.842%Details
Uncovered ChangesNo uncovered changes found. Coverage RegressionsRequires a base build to compare against. How to fix this → Coverage Stats
💛 - Coveralls |
Merging this PR will improve performance by 54.44%
|
| Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|
| ⚡ | projection derive: write one NESTED field (reference) |
807.9 µs | 523.1 µs | +54.44% |
Tip
Curious why performance improved? Comment @codspeedbot explain why performance improved on this PR, or directly use the CodSpeed MCP with your agent.
Comparing DerpyCrabs:fix/settle-unchanged-pending-branches (4659711) with next (b5bd6fb)
A conditional memo can stop reading a pending dependency and recover to its previous value:
If a dependent tries to read while this memo is pending, setting
disabled(true)should unblock it—even ifenabledwas alreadyfalsebefore loading. Currently, equality suppresses notification and the dependent can remain stuck pending.In our app, this leaves list rows missing after a successful fetch: their rendering is blocked on a conditional event-handler dependency that is no longer needed.
Reuse the pending-settlement walk to clear inherited pending state on equal-value recovery. Retry blocked readers without rerunning unchanged dependents or clearing pending state still required through another dependency path.
Seven regression cases pass across all three build modes; four fail on unpatched
next.