From 18e6a9b4f7bd5eb978ede24062a4a9b16ea9b97f Mon Sep 17 00:00:00 2001 From: Varun Chawla Date: Sun, 22 Feb 2026 18:29:52 -0800 Subject: [PATCH 1/2] fix: skip timer when no deadline, avoid negative setTimeout When deadline is 0, return early from the promise executor instead of computing a huge timeout via (0 || kMaxDeadline). This avoids setting an unnecessary ~24-day timer. When deadline is set, cap the timeout with Math.min to stay within setTimeout's 32-bit limit. --- .../playwright-core/src/utils/isomorphic/timeoutRunner.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/playwright-core/src/utils/isomorphic/timeoutRunner.ts b/packages/playwright-core/src/utils/isomorphic/timeoutRunner.ts index 9a01d0f0796cc..03d290fb0241e 100644 --- a/packages/playwright-core/src/utils/isomorphic/timeoutRunner.ts +++ b/packages/playwright-core/src/utils/isomorphic/timeoutRunner.ts @@ -29,9 +29,11 @@ export async function raceAgainstDeadline(cb: () => Promise, deadline: num return { result, timedOut: false }; }), new Promise<{ timedOut: true }>(resolve => { + if (!deadline) + return; const kMaxDeadline = 2147483647; // 2^31-1 - const timeout = (deadline || kMaxDeadline) - monotonicTime(); - timer = setTimeout(() => resolve({ timedOut: true }), timeout); + const timeout = deadline - monotonicTime(); + timer = setTimeout(() => resolve({ timedOut: true }), Math.min(timeout, kMaxDeadline)); }), ]).finally(() => { clearTimeout(timer); From 0b04c6479c72682ba2cbcc61391dd23f5b259892 Mon Sep 17 00:00:00 2001 From: Varun Chawla Date: Mon, 23 Feb 2026 23:29:48 -0800 Subject: [PATCH 2/2] fix: don't set timer when there is no deadline When deadline is 0 (no timeout), skip the timer entirely instead of computing a fallback from kMaxDeadline. When deadline is set, use deadline - monotonicTime() directly as the timer value. Remove the kMaxDeadline constant since it's no longer needed. --- .../playwright-core/src/utils/isomorphic/timeoutRunner.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/playwright-core/src/utils/isomorphic/timeoutRunner.ts b/packages/playwright-core/src/utils/isomorphic/timeoutRunner.ts index 03d290fb0241e..d551ee203323b 100644 --- a/packages/playwright-core/src/utils/isomorphic/timeoutRunner.ts +++ b/packages/playwright-core/src/utils/isomorphic/timeoutRunner.ts @@ -31,9 +31,7 @@ export async function raceAgainstDeadline(cb: () => Promise, deadline: num new Promise<{ timedOut: true }>(resolve => { if (!deadline) return; - const kMaxDeadline = 2147483647; // 2^31-1 - const timeout = deadline - monotonicTime(); - timer = setTimeout(() => resolve({ timedOut: true }), Math.min(timeout, kMaxDeadline)); + timer = setTimeout(() => resolve({ timedOut: true }), deadline - monotonicTime()); }), ]).finally(() => { clearTimeout(timer);