mirror of
https://github.com/oven-sh/bun
synced 2026-02-25 19:17:20 +01:00
## Summary - `FileSystemRouter.Route.parse()` was caching file descriptors in the global entry cache (`entry.cache.fd`). When `Bun.build()` later closed these fds during `ParseTask`, the cache still referenced them. Subsequent `Bun.build()` calls would find these stale fds, pass them to `readFileWithAllocator`, and `seekTo(0)` would fail with EBADF (errno 9). - The fix ensures `Route.parse` always closes the file it opens for `getFdPath` instead of caching it in the shared entry. The fd was only used to resolve the absolute path via `getFdPath`, so caching was unnecessary and harmful. Closes #18242 ## Test plan - [x] Added regression test `test/regression/issue/18242.test.ts` that creates a `FileSystemRouter` and runs `Bun.build()` three times sequentially - [x] Test passes with `bun bd test test/regression/issue/18242.test.ts` - [x] Test fails with `USE_SYSTEM_BUN=1 bun test test/regression/issue/18242.test.ts` (system bun v1.3.9) - [x] Verified 5 sequential builds work correctly after the fix 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Bot <claude-bot@bun.sh> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>