Skip to content

Commit 1fdf11f

Browse files
committed
fix: prevent memory leaking signals in legacy mode
1 parent 91272d7 commit 1fdf11f

File tree

5 files changed

+11
-6
lines changed

5 files changed

+11
-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: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ 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 ? source(/** @type {V} */ (undefined)) : mutable_source(/** @type {V} */ (undefined), false, false);
62+
var error_source = runes ? source(/** @type {V} */ (undefined)) : mutable_source(/** @type {V} */ (undefined), false, false);
6363
var resolved = false;
6464

6565
/**

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
@@ -93,15 +93,15 @@ export function state(v, stack) {
9393
* @returns {Source<V>}
9494
*/
9595
/*#__NO_SIDE_EFFECTS__*/
96-
export function mutable_source(initial_value, immutable = false) {
96+
export function mutable_source(initial_value, immutable = false, trackable = true) {
9797
const s = source(initial_value);
9898
if (!immutable) {
9999
s.equals = safe_equals;
100100
}
101101

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

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)