diff --git a/.changeset/slimy-laws-explode.md b/.changeset/slimy-laws-explode.md new file mode 100644 index 000000000000..b3548bd11f4f --- /dev/null +++ b/.changeset/slimy-laws-explode.md @@ -0,0 +1,5 @@ +--- +"svelte": patch +--- + +fix: improve handling of unowned derived signals diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index e0d5d1087182..41bc9416f090 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -623,8 +623,14 @@ function process_microtask() { export function schedule_effect(signal, sync) { const flags = signal.f; if (sync) { - execute_effect(signal); - set_signal_status(signal, CLEAN); + const previously_flushing_effect = is_flushing_effect; + try { + is_flushing_effect = true; + execute_effect(signal); + set_signal_status(signal, CLEAN); + } finally { + is_flushing_effect = previously_flushing_effect; + } } else { if (current_scheduler_mode === FLUSH_MICROTASK) { if (!is_micro_task_queued) { diff --git a/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/Component.svelte b/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/Component.svelte new file mode 100644 index 000000000000..8c64dca9a94e --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/Component.svelte @@ -0,0 +1,12 @@ + diff --git a/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/_config.js b/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/_config.js new file mode 100644 index 000000000000..c9d17a200a4c --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/derived-unowned-2/_config.js @@ -0,0 +1,15 @@ +import { test } from '../../test'; + +export default test({ + html: '