From 1d4d532f155a98c5edbf286b9c079b972e1852c1 Mon Sep 17 00:00:00 2001 From: Damian Tarnawski Date: Sun, 26 Mar 2023 05:15:34 +0200 Subject: [PATCH] Fix infinite loop in Suspense error handling on the server (#1649) --- packages/solid/src/server/rendering.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/solid/src/server/rendering.ts b/packages/solid/src/server/rendering.ts index a0a3c64aa..a9c5f1519 100644 --- a/packages/solid/src/server/rendering.ts +++ b/packages/solid/src/server/rendering.ts @@ -552,7 +552,6 @@ export function SuspenseList(props: { export function Suspense(props: { fallback?: string; children: string }) { let done: undefined | ((html?: string, error?: any) => boolean); - let clean: any; const ctx = sharedConfig.context!; const id = ctx.id + ctx.count; const o = createOwner(); @@ -569,8 +568,8 @@ export function Suspense(props: { fallback?: string; children: string }) { }); function runSuspense() { setHydrateContext({ ...ctx, count: 0 }); - o && cleanNode(o); - return runWithOwner(o!, () => { + cleanNode(o); + return runWithOwner(o, () => { return createComponent(SuspenseContext.Provider, { value, get children() { @@ -584,14 +583,14 @@ export function Suspense(props: { fallback?: string; children: string }) { // never suspended if (suspenseComplete(value)) return res; - onError(err => { - if (!done || !done(undefined, err)) { - if (o) - runWithOwner(o.owner!, () => { + runWithOwner(o, () => { + onError(err => { + if (!done || !done(undefined, err)) { + runWithOwner(o.owner, () => { throw err; }); - else throw err; - } + } + }); }); done = ctx.async ? ctx.registerFragment(id) : undefined; if (ctx.async) {