Skip to content

Commit 6636f74

Browse files
authored
fix: prevent memory leaking signals in legacy mode (#16145)
* fix: prevent memory leaking signals in legacy mode * format * fix --------- Co-authored-by: 7nik <[email protected]>
1 parent 92ea58b commit 6636f74

File tree

5 files changed

+13
-6
lines changed

5 files changed

+13
-6
lines changed

.changeset/soft-oranges-approve.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: prevent memory leaking signals in legacy mode

packages/svelte/src/internal/client/dom/blocks/await.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,10 @@ export function await_block(node, get_input, pending_fn, then_fn, catch_fn) {
5858
/** @type {Effect | null} */
5959
var catch_effect;
6060

61-
var input_source = (runes ? source : mutable_source)(/** @type {V} */ (undefined));
62-
var error_source = (runes ? source : mutable_source)(undefined);
61+
var input_source = runes
62+
? source(/** @type {V} */ (undefined))
63+
: mutable_source(/** @type {V} */ (undefined), false, false);
64+
var error_source = runes ? source(undefined) : mutable_source(undefined, false, false);
6365
var resolved = false;
6466

6567
/**

packages/svelte/src/internal/client/dom/blocks/each.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ function create_item(
521521
var reactive = (flags & EACH_ITEM_REACTIVE) !== 0;
522522
var mutable = (flags & EACH_ITEM_IMMUTABLE) === 0;
523523

524-
var v = reactive ? (mutable ? mutable_source(value) : source(value)) : value;
524+
var v = reactive ? (mutable ? mutable_source(value, false, false) : source(value)) : value;
525525
var i = (flags & EACH_INDEX_REACTIVE) === 0 ? index : source(index);
526526

527527
if (DEV && reactive) {

packages/svelte/src/internal/client/reactivity/sources.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,15 @@ export function state(v, stack) {
9797
* @returns {Source<V>}
9898
*/
9999
/*#__NO_SIDE_EFFECTS__*/
100-
export function mutable_source(initial_value, immutable = false) {
100+
export function mutable_source(initial_value, immutable = false, trackable = true) {
101101
const s = source(initial_value);
102102
if (!immutable) {
103103
s.equals = safe_equals;
104104
}
105105

106106
// bind the signal to the component context, in case we need to
107107
// track updates to trigger beforeUpdate/afterUpdate callbacks
108-
if (legacy_mode_flag && component_context !== null && component_context.l !== null) {
108+
if (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {
109109
(component_context.l.s ??= []).push(s);
110110
}
111111

packages/svelte/src/legacy/legacy-client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class Svelte4Component {
8282
* @param {unknown} value
8383
*/
8484
var add_source = (key, value) => {
85-
var s = mutable_source(value);
85+
var s = mutable_source(value, false, false);
8686
sources.set(key, s);
8787
return s;
8888
};

0 commit comments

Comments
 (0)