Skip to content

test: measure memory via harness rss() instead of process.memoryUsage.rss() - #36429

Merged
Jarred-Sumner merged 1 commit into
mainfrom
claude/harness-rss-memory-footprint
Jul 30, 2026
Merged

test: measure memory via harness rss() instead of process.memoryUsage.rss()#36429
Jarred-Sumner merged 1 commit into
mainfrom
claude/harness-rss-memory-footprint

Conversation

@Jarred-Sumner

Copy link
Copy Markdown
Collaborator

What

RSS on macOS keeps freed-but-lazily-unmapped (MADV_FREE_REUSABLE) pages, so leak tests that diff process.memoryUsage.rss() measure a high-water mark and flake. This switches every RSS-based leak test to Bun.unsafe.memoryFootprint() (phys_footprint) on darwin.

Where Change
test/harness.ts New rss() export: memoryFootprint on darwin, process.memoryUsage.rss elsewhere
*.test.ts/js (in-process) import { rss } from "harness"; shadowing rss locals renamed
Spawned fixtures + inline -e scripts Local const rss = process.platform === "darwin" && typeof Bun.unsafe.memoryFootprint === "function" ? … : process.memoryUsage.rss
Fixtures that also run under Node Same, plus typeof Bun !== "undefined" guard

Untouched on purpose: test/js/node/test/parallel/** (upstream Node tests) and process.test.js's assertion on the memoryUsage.rss() API itself.

Verify

Ran the affected files with the system Bun (1.4.0, which already has memoryFootprint) on darwin — all pass.

….rss()

On macOS, RSS includes MADV_FREE_REUSABLE pages the process has already
released, so leak tests report the high-water mark rather than what is
actually retained, and the deltas drift with allocator/GC timing. This
makes RSS-delta leak tests flaky on darwin.

Add an rss() export to test/harness.ts that uses
Bun.unsafe.memoryFootprint() (phys_footprint) on darwin and falls back
to process.memoryUsage.rss() elsewhere, and switch the leak tests over
to it. Test files import it from harness; spawned fixtures and inline
-e scripts define the same helper locally, with a typeof Bun guard where
the fixture can also run under Node.

No-Verification-Needed: test-only change
@github-actions

Copy link
Copy Markdown
Contributor

Found 1 issue this PR may fix:

  1. macOS Apple Silicon: memory invisible to RSS — bmalloc slabs, worker cleanup gaps, GC safety bugs #28318 - Documents that process.memoryUsage().rss on macOS underreports actual memory because bmalloc/pas slabs are invisible to RSS but visible to phys_footprint; this PR switches leak tests to use Bun.unsafe.memoryFootprint() which wraps exactly that metric

If this is helpful, copy the block below into the PR description to auto-close this issue on merge.

Fixes #28318

🤖 Generated with Claude Code

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM — mechanical test-only sweep. The inline nit on setInterval-leak-fixture.js (missing typeof Bun guard) only affects manual Node runs on darwin, not CI, so it's non-blocking.

Extended reasoning...

Overview

This PR adds a single rss() export to test/harness.ts that returns Bun.unsafe.memoryFootprint() on darwin and process.memoryUsage.rss elsewhere, then applies it across ~100 leak-test files and fixtures. In-process tests import from harness; spawned fixtures and inline -e scripts get a local one-liner ternary; fixtures that also run under Node additionally guard on typeof Bun !== "undefined". No runtime/production code is touched.

Security risks

None. Test-only, no user-facing surface, no external inputs, no auth/crypto/permissions.

Level of scrutiny

Low per-file, moderate in aggregate for consistency. Each hunk is the same 1-4 line substitution; the risk is a missed rename shadowing the harness import or a fixture whose Node-compat guard was omitted. I spot-checked the non-trivial rename sites: sql.test.ts (rssbefore, log key preserved), bun-serve-static-helpers.ts (rssrssMB/finalRSS), structured-clone-fastpath.test.ts (rssrss1), socketaddress.spec.ts (object→scalar, assertion updated to match), body-leak-test-fixture.ts (replaced the pre-existing ?? process.memoryUsage.rss() fallback with the standard ternary). All correct.

Other factors

  • The one finding is a consistency nit: setInterval-leak-fixture.js lacks the typeof Bun !== "undefined" guard its two sibling timer fixtures received. CI only spawns it via bunExe(), so nothing breaks in the merge path.
  • Thresholds are unchanged everywhere — since phys_footprint ≤ RSS on darwin, existing upper-bound assertions remain valid or become slightly less flaky, which is the point.
  • The PR description explicitly excludes test/js/node/test/parallel/** and the process.test.js assertion on the memoryUsage.rss() API itself, which is the right scoping.
  • Already landed on main (commit 65848d23).

Comment on lines +8 to +11
const usage =
process.platform === "darwin" && typeof Bun.unsafe.memoryFootprint === "function"
? Bun.unsafe.memoryFootprint
: process.memoryUsage.rss;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 This fixture is written to be Node-compatible (it polyfills Promise.withResolvers and guards typeof Bun !== "undefined" in gc()), but the new usage const evaluates typeof Bun.unsafe.memoryFootprint without a typeof Bun !== "undefined" guard — under Node on darwin this throws ReferenceError: Bun is not defined at load. The two sibling timer fixtures updated in this PR (setinterval-cancel-fixture.js, setTimeout-clear-in-callback-leak-fixture.js) both received the guard; this one was missed. CI only spawns this via bunExe() so nothing breaks there — just a consistency nit.

Extended reasoning...

What

setInterval-leak-fixture.js carries explicit Node-compat scaffolding: it polyfills Promise.withResolvers (line 13) and its gc() helper checks typeof Bun !== "undefined" before calling Bun.gc (line 23). The intent is that the fixture can be run under Node for comparison. This PR replaces the old function usage() { return process.memoryUsage.rss(); } with:

const usage =
  process.platform === "darwin" && typeof Bun.unsafe.memoryFootprint === "function"
    ? Bun.unsafe.memoryFootprint
    : process.memoryUsage.rss;

Unlike the sibling fixtures, there is no typeof Bun !== "undefined" && before typeof Bun.unsafe.memoryFootprint.

Why it fails under Node on darwin

typeof <bare identifier> is safe on an undeclared name, but typeof Bun.unsafe.memoryFootprint is typeof applied to a member expression — evaluating it must first resolve Bun, then read .unsafe, then read .memoryFootprint. Under Node, Bun is not declared, so the very first step throws ReferenceError: Bun is not defined.

Step-by-step on Node/darwin:

  1. Module loads; the const usage = ... initializer runs at top level.
  2. process.platform === "darwin"true, so && proceeds to the right operand.
  3. Right operand is typeof Bun.unsafe.memoryFootprint. To compute it, the engine evaluates the MemberExpression Bun.unsafe.memoryFootprint, starting with the reference Bun.
  4. Bun is an unresolvable reference in Node → ReferenceError: Bun is not defined is thrown before typeof ever runs.
  5. The fixture aborts at load time; nothing after line 8 executes.

On non-darwin Node the process.platform === "darwin" check is false and && short-circuits, so the fixture still works there.

Why existing code doesn't prevent it

The file's other Node guards (gc() at line 23, globalThis.Bun at line 88) run after line 8, so they never get a chance. Nothing above line 8 defines or guards Bun.

Missed sibling

The PR description's own table says: "Fixtures that also run under Node — Same, plus typeof Bun !== "undefined" guard." Both other timer fixtures touched in this PR received exactly that:

  • setinterval-cancel-fixture.js line 5-8: process.platform === "darwin" && typeof Bun !== "undefined" && typeof Bun.unsafe.memoryFootprint === "function" ? ...
  • setTimeout-clear-in-callback-leak-fixture.js line 15-18: same pattern.

Per REVIEW.md "Fix the whole class in the same PR — grep for every sibling site sharing the pattern", this is the one sibling that was missed.

Impact

CI is unaffected: setInterval.test.js only spawns this fixture via bunExe(), where Bun is always defined. The only breakage is manual node setInterval-leak-fixture.js runs on macOS, which worked before this PR. Hence nit severity — nothing in the merge-blocking path breaks.

Fix

Add the same guard used in the sibling fixtures:

const usage =
  process.platform === "darwin" && typeof Bun !== "undefined" && typeof Bun.unsafe.memoryFootprint === "function"
    ? Bun.unsafe.memoryFootprint
    : process.memoryUsage.rss;

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 51 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5b4a89a6-d16d-4aaf-a733-a6b17e573bed

📥 Commits

Reviewing files that changed from the base of the PR and between 6b463d0 and 65848d2.

📒 Files selected for processing (103)
  • test/bundler/bun-build-api.test.ts
  • test/cli/hot/hot.test.ts
  • test/cli/run/cjs-fixture-leak-small.js
  • test/cli/run/esm-bug-leak-fixture.mjs
  • test/cli/run/esm-fixture-leak-small.mjs
  • test/cli/run/require-cache-bug-leak-fixture.js
  • test/cli/run/require-cache.test.ts
  • test/harness.ts
  • test/js/bun/archive-extract-leak-repro.ts
  • test/js/bun/archive.test.ts
  • test/js/bun/css/small-list-grow.test.ts
  • test/js/bun/css/token-list-backtracking.test.ts
  • test/js/bun/glob/leak.test.ts
  • test/js/bun/http/body-leak-test-fixture.ts
  • test/js/bun/http/bun-serve-file.test.ts
  • test/js/bun/http/bun-serve-static-helpers.ts
  • test/js/bun/http/proxy-stress-memory-fixture.ts
  • test/js/bun/http/req-url-leak-fixture.js
  • test/js/bun/http/request-constructor-leak-fixture.js
  • test/js/bun/http/response-constructor-leak-fixture.js
  • test/js/bun/http/serve-request-extra-memory-fixture.ts
  • test/js/bun/http/serve-response-stream-sink-leak-fixture.ts
  • test/js/bun/http/server-fetch-string-leak-fixture.js
  • test/js/bun/http/tls-bunfile-leak-fixture.js
  • test/js/bun/http/tls-keepalive-leak-fixture.js
  • test/js/bun/image/image-adversarial.test.ts
  • test/js/bun/io/bun-write-leak-fixture.js
  • test/js/bun/json5/json5.test.ts
  • test/js/bun/resolve/load-file-loader-a-lot.test.ts
  • test/js/bun/s3/bun-write-leak-fixture.js
  • test/js/bun/s3/s3-stream-leak-fixture.js
  • test/js/bun/s3/s3-text-leak-fixture.js
  • test/js/bun/s3/s3-write-leak-fixture.js
  • test/js/bun/s3/s3-writer-leak-fixture.js
  • test/js/bun/shell/bunshell.test.ts
  • test/js/bun/shell/commands/seq.test.ts
  • test/js/bun/shell/leak.test.ts
  • test/js/bun/shell/shell-leak-args.test.ts
  • test/js/bun/spawn/spawn-noread-leak.test.ts
  • test/js/bun/spawn/spawn-pipe-leak.test.ts
  • test/js/bun/spawn/spawn-stdout-iterate-leak.fixture.ts
  • test/js/bun/transpiler/transpiler-comma-chain-oom.test.ts
  • test/js/bun/util/filesystem_router.test.ts
  • test/js/bun/util/inspect-error-leak.test.js
  • test/js/bun/util/password.test.ts
  • test/js/bun/util/zstd.test.ts
  • test/js/node/buffer-from-encoding-leak.test.ts
  • test/js/node/fs/abort-signal-leak-read-write-file-fixture.ts
  • test/js/node/fs/readdirSync-recursive-error-leak-fixture.js
  • test/js/node/http/fixtures/http.compress.leak.server.ts
  • test/js/node/http2/node-http2-memory-leak.js
  • test/js/node/module/node-module-module.test.js
  • test/js/node/net/handle-leak.test.ts
  • test/js/node/net/net-mongodb-pattern-leak.test.ts
  • test/js/node/net/socketaddress.spec.ts
  • test/js/node/process/process-stdin.test.ts
  • test/js/node/tls/node-tls-getpeercert-leak.test.ts
  • test/js/node/tls/node-tls-set-session-leak.fixture.ts
  • test/js/node/tls/tls-connect-socket-churn.test.ts
  • test/js/node/url/pathToFileURL-leak-fixture.js
  • test/js/node/vm/script-leak.test.ts
  • test/js/node/vm/sourcetextmodule-leak.test.ts
  • test/js/node/watch/fs.watch.test.ts
  • test/js/node/worker_threads/eval-source-leak-fixture.js
  • test/js/node/worker_threads/worker_thread_check.ts
  • test/js/node/zlib/leak.test.ts
  • test/js/sql/sql-mysql-query-string-leak.test.ts
  • test/js/sql/sql.test.ts
  • test/js/third_party/body-parser/express-memory-leak-fixture.mjs
  • test/js/third_party/prisma/prisma.test.ts
  • test/js/web/encoding/text-decoder.test.js
  • test/js/web/fetch/abortsignal-leak-fixture.ts
  • test/js/web/fetch/blob.test.ts
  • test/js/web/fetch/body.test.ts
  • test/js/web/fetch/fetch-abort-stream-leak-fixture.ts
  • test/js/web/fetch/fetch-backpressure.test.ts
  • test/js/web/fetch/fetch-http2-adversarial.test.ts
  • test/js/web/fetch/fetch-leak-test-fixture-2.js
  • test/js/web/fetch/fetch-leak-test-fixture-4.js
  • test/js/web/fetch/fetch-leak-test-fixture-5.js
  • test/js/web/fetch/fetch-leak-test-fixture-6.js
  • test/js/web/fetch/fetch-leak.test.ts
  • test/js/web/fetch/fetch-redirect.test.ts
  • test/js/web/fetch/fetch.test.ts
  • test/js/web/html/FormData-file-error-leak-fixture.ts
  • test/js/web/request/request-clone-leak.test.ts
  • test/js/web/streams/streams-leak.test.ts
  • test/js/web/structured-clone-blob-file.test.ts
  • test/js/web/structured-clone-fastpath.test.ts
  • test/js/web/timers/setInterval-leak-fixture.js
  • test/js/web/timers/setTimeout-clear-in-callback-leak-fixture.js
  • test/js/web/timers/setinterval-cancel-fixture.js
  • test/js/web/websocket/websocket.test.js
  • test/js/web/workers/message-port-closed-leak.test.ts
  • test/js/web/workers/message-port-context-destroy-leak.test.ts
  • test/js/web/workers/performance-observer-leak.test.ts
  • test/js/workerd/html-rewriter-leak.test.ts
  • test/napi/napi-app/leak-fixture.js
  • test/napi/napi.test.ts
  • test/regression/brotli-reset-leak.test.ts
  • test/regression/issue/26088.test.ts
  • test/regression/issue/28632.test.ts
  • test/regression/issue/28756.test.ts

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

This PR may be a duplicate of:

  1. test(HTMLRewriter): measure kernel peak RSS, not a point sample that straddles a segment decommit #34786 - Fixes the same flaky RSS measurement in html-rewriter-leak.test.ts using maxRSS instead of the unified rss() helper
  2. test(tls): compare per-round peak RSS in the getPeerCertificate leak test #35322 - Fixes the same flaky RSS measurement in node-tls-getpeercert-leak.test.ts using per-round peak RSS
  3. test(require-cache): gate the long-export-names import() leak fixture on mimalloc page growth #34159 - Fixes the same flaky RSS measurement in require-cache.test.ts using mimalloc page counts
  4. test(fetch-leak): gate the streaming-abort leak fixture on off-heap growth #36148 - Fixes the same flaky RSS measurement in fetch-leak.test.ts using off-heap growth gating
  5. test(fetch): widen fetch-leak RSS thresholds for macOS/Windows arm64 #33988 - Widens RSS thresholds in fetch-leak.test.ts for the same macOS/arm64 flakiness
  6. test(net): measure mongodb-pattern RSS at steady state, not during JIT tier-up #34752 - Fixes the same flaky RSS measurement in net-mongodb-pattern-leak.test.ts with warmup rounds
  7. test: widen net-mongodb-pattern-leak RSS bound; await the named-pipe GC check #33725 - Widens RSS bounds in net-mongodb-pattern-leak.test.ts for the same flakiness
  8. test: surface ASAN status to leak fixtures via bunEnv #35081 - Modifies test/harness.ts and the same leak fixture files to surface ASAN status

🤖 Generated with Claude Code

@Jarred-Sumner
Jarred-Sumner merged commit 176fc3f into main Jul 30, 2026
54 of 55 checks passed
@Jarred-Sumner
Jarred-Sumner deleted the claude/harness-rss-memory-footprint branch July 30, 2026 07:16
hughescr added a commit to hughescr/bun that referenced this pull request Jul 31, 2026
* upstream/main: (422 commits)
  install: drop packages held only by optional-peer resolution slots from bun.lock (oven-sh#35681)
  Update mimalloc to the upstream dev3 (v3.4.3) sync (oven-sh#36431)
  compile(pe): ftruncate the Windows --compile output after writing (oven-sh#36430)
  Strong: back bun_jsc::Strong with StrongRootBlock; free AbortSignal.timeout at wrapper GC (oven-sh#35849)
  test(harness): replace toRun matcher with async bunRun + toSpawn (oven-sh#36424)
  test: measure memory via harness rss() instead of process.memoryUsage.rss() (oven-sh#36429)
  Deflake a few tests
  no-orphans(windows): allow CREATE_BREAKAWAY_FROM_JOB and set DIE_ON_UNHANDLED_EXCEPTION on the Job (oven-sh#36414)
  GarbageCollectionController: replace per-tick heap sampler with idle timer only (oven-sh#35356)
  exe_format(pe): write a valid OptionalHeader.CheckSum for --compile output (oven-sh#36383)
  FileSink: flush buffered bytes when process.exit() runs in the same tick as write() (oven-sh#36250)
  test(http): speed up and de-flake serve-async-stream-client-abort.test.ts (oven-sh#35919)
  test(20144): stop racing child startup against the 1s SIGKILL guard (oven-sh#34166)
  test(no-orphans): skip fast-exit perl daemon test on macOS (oven-sh#36413)
  fs: return negative BigIntStats *Ns for pre-epoch timestamps (oven-sh#36187)
  event_loop: make DeferredTaskQueue::run tolerate re-entrant map mutation (oven-sh#32703)
  dotenv: stop panicking on nested `${...}` inside `${VAR:-default}` (oven-sh#36199)
  fetch: make the idle timer an absolute deadline for the response header block (oven-sh#36145)
  bundler: don't panic on unterminated naming template placeholders (oven-sh#36325)
  Buffer#indexOf/lastIndexOf: rare-byte SIMD filter with a Two-Way O(n+m) fallback (oven-sh#36420)
  ...

# Conflicts:
#	src/jsc/bindings/BunDebugger.cpp
hughescr added a commit to hughescr/bun that referenced this pull request Jul 31, 2026
* upstream/main: (422 commits)
  install: drop packages held only by optional-peer resolution slots from bun.lock (oven-sh#35681)
  Update mimalloc to the upstream dev3 (v3.4.3) sync (oven-sh#36431)
  compile(pe): ftruncate the Windows --compile output after writing (oven-sh#36430)
  Strong: back bun_jsc::Strong with StrongRootBlock; free AbortSignal.timeout at wrapper GC (oven-sh#35849)
  test(harness): replace toRun matcher with async bunRun + toSpawn (oven-sh#36424)
  test: measure memory via harness rss() instead of process.memoryUsage.rss() (oven-sh#36429)
  Deflake a few tests
  no-orphans(windows): allow CREATE_BREAKAWAY_FROM_JOB and set DIE_ON_UNHANDLED_EXCEPTION on the Job (oven-sh#36414)
  GarbageCollectionController: replace per-tick heap sampler with idle timer only (oven-sh#35356)
  exe_format(pe): write a valid OptionalHeader.CheckSum for --compile output (oven-sh#36383)
  FileSink: flush buffered bytes when process.exit() runs in the same tick as write() (oven-sh#36250)
  test(http): speed up and de-flake serve-async-stream-client-abort.test.ts (oven-sh#35919)
  test(20144): stop racing child startup against the 1s SIGKILL guard (oven-sh#34166)
  test(no-orphans): skip fast-exit perl daemon test on macOS (oven-sh#36413)
  fs: return negative BigIntStats *Ns for pre-epoch timestamps (oven-sh#36187)
  event_loop: make DeferredTaskQueue::run tolerate re-entrant map mutation (oven-sh#32703)
  dotenv: stop panicking on nested `${...}` inside `${VAR:-default}` (oven-sh#36199)
  fetch: make the idle timer an absolute deadline for the response header block (oven-sh#36145)
  bundler: don't panic on unterminated naming template placeholders (oven-sh#36325)
  Buffer#indexOf/lastIndexOf: rare-byte SIMD filter with a Two-Way O(n+m) fallback (oven-sh#36420)
  ...
hughescr added a commit to hughescr/bun that referenced this pull request Jul 31, 2026
* upstream/main: (422 commits)
  install: drop packages held only by optional-peer resolution slots from bun.lock (oven-sh#35681)
  Update mimalloc to the upstream dev3 (v3.4.3) sync (oven-sh#36431)
  compile(pe): ftruncate the Windows --compile output after writing (oven-sh#36430)
  Strong: back bun_jsc::Strong with StrongRootBlock; free AbortSignal.timeout at wrapper GC (oven-sh#35849)
  test(harness): replace toRun matcher with async bunRun + toSpawn (oven-sh#36424)
  test: measure memory via harness rss() instead of process.memoryUsage.rss() (oven-sh#36429)
  Deflake a few tests
  no-orphans(windows): allow CREATE_BREAKAWAY_FROM_JOB and set DIE_ON_UNHANDLED_EXCEPTION on the Job (oven-sh#36414)
  GarbageCollectionController: replace per-tick heap sampler with idle timer only (oven-sh#35356)
  exe_format(pe): write a valid OptionalHeader.CheckSum for --compile output (oven-sh#36383)
  FileSink: flush buffered bytes when process.exit() runs in the same tick as write() (oven-sh#36250)
  test(http): speed up and de-flake serve-async-stream-client-abort.test.ts (oven-sh#35919)
  test(20144): stop racing child startup against the 1s SIGKILL guard (oven-sh#34166)
  test(no-orphans): skip fast-exit perl daemon test on macOS (oven-sh#36413)
  fs: return negative BigIntStats *Ns for pre-epoch timestamps (oven-sh#36187)
  event_loop: make DeferredTaskQueue::run tolerate re-entrant map mutation (oven-sh#32703)
  dotenv: stop panicking on nested `${...}` inside `${VAR:-default}` (oven-sh#36199)
  fetch: make the idle timer an absolute deadline for the response header block (oven-sh#36145)
  bundler: don't panic on unterminated naming template placeholders (oven-sh#36325)
  Buffer#indexOf/lastIndexOf: rare-byte SIMD filter with a Two-Way O(n+m) fallback (oven-sh#36420)
  ...

# Conflicts:
#	src/js/internal/debugger.ts
hughescr added a commit to hughescr/bun that referenced this pull request Jul 31, 2026
* upstream/main: (422 commits)
  install: drop packages held only by optional-peer resolution slots from bun.lock (oven-sh#35681)
  Update mimalloc to the upstream dev3 (v3.4.3) sync (oven-sh#36431)
  compile(pe): ftruncate the Windows --compile output after writing (oven-sh#36430)
  Strong: back bun_jsc::Strong with StrongRootBlock; free AbortSignal.timeout at wrapper GC (oven-sh#35849)
  test(harness): replace toRun matcher with async bunRun + toSpawn (oven-sh#36424)
  test: measure memory via harness rss() instead of process.memoryUsage.rss() (oven-sh#36429)
  Deflake a few tests
  no-orphans(windows): allow CREATE_BREAKAWAY_FROM_JOB and set DIE_ON_UNHANDLED_EXCEPTION on the Job (oven-sh#36414)
  GarbageCollectionController: replace per-tick heap sampler with idle timer only (oven-sh#35356)
  exe_format(pe): write a valid OptionalHeader.CheckSum for --compile output (oven-sh#36383)
  FileSink: flush buffered bytes when process.exit() runs in the same tick as write() (oven-sh#36250)
  test(http): speed up and de-flake serve-async-stream-client-abort.test.ts (oven-sh#35919)
  test(20144): stop racing child startup against the 1s SIGKILL guard (oven-sh#34166)
  test(no-orphans): skip fast-exit perl daemon test on macOS (oven-sh#36413)
  fs: return negative BigIntStats *Ns for pre-epoch timestamps (oven-sh#36187)
  event_loop: make DeferredTaskQueue::run tolerate re-entrant map mutation (oven-sh#32703)
  dotenv: stop panicking on nested `${...}` inside `${VAR:-default}` (oven-sh#36199)
  fetch: make the idle timer an absolute deadline for the response header block (oven-sh#36145)
  bundler: don't panic on unterminated naming template placeholders (oven-sh#36325)
  Buffer#indexOf/lastIndexOf: rare-byte SIMD filter with a Two-Way O(n+m) fallback (oven-sh#36420)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant