Skip to content

Commit b187005

Browse files
committed
fix-untracked-writes-leak
1 parent c544a59 commit b187005

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

.changeset/pretty-dingos-unite.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: address untracked_writes memory leak

packages/svelte/src/internal/client/runtime.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -398,13 +398,13 @@ function schedule_possible_effect_self_invalidation(signal, effect, root = true)
398398
/**
399399
* @template V
400400
* @param {Reaction} reaction
401+
* @param {Reaction | null} [previous_reaction]
401402
* @returns {V}
402403
*/
403-
export function update_reaction(reaction) {
404+
export function update_reaction(reaction, previous_reaction = active_reaction) {
404405
var previous_deps = new_deps;
405406
var previous_skipped_deps = skipped_deps;
406407
var previous_untracked_writes = untracked_writes;
407-
var previous_reaction = active_reaction;
408408
var previous_skip_reaction = skip_reaction;
409409
var previous_reaction_sources = reaction_sources;
410410
var previous_component_context = component_context;
@@ -562,9 +562,10 @@ export function remove_reactions(signal, start_index) {
562562

563563
/**
564564
* @param {Effect} effect
565+
* @param {Reaction | null} [previous_reaction]
565566
* @returns {void}
566567
*/
567-
export function update_effect(effect) {
568+
export function update_effect(effect, previous_reaction = active_reaction) {
568569
var flags = effect.f;
569570

570571
if ((flags & DESTROYED) !== 0) {
@@ -593,7 +594,7 @@ export function update_effect(effect) {
593594
}
594595

595596
execute_effect_teardown(effect);
596-
var teardown = update_reaction(effect);
597+
var teardown = update_reaction(effect, previous_reaction);
597598
effect.teardown = typeof teardown === 'function' ? teardown : null;
598599
effect.wv = write_version;
599600

@@ -803,7 +804,7 @@ function process_effects(root) {
803804
try {
804805
active_reaction = effect;
805806
if (check_dirtiness(effect)) {
806-
update_effect(effect);
807+
update_effect(effect, previous_active_reaction);
807808
}
808809
} catch (error) {
809810
handle_error(error, effect, null, effect.ctx);

0 commit comments

Comments
 (0)