mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 19:08:50 +00:00
## Summary Fixes an assertion failure that occurred when `server.stop()` was called while HTTP requests were still in flight. ## Root Cause The issue was in `jsValueAssertAlive()` at `src/bun.js/api/server.zig:627`, which had an assertion requiring `server.listener != null`. However, `server.stop()` immediately sets `listener` to null, causing assertion failures when pending requests triggered callbacks that accessed the server's JavaScript value. ## Solution Converted the server's `js_value` from `jsc.Strong.Optional` to `jsc.JSRef` for safer lifecycle management: - **On `stop()`**: Downgrade from strong to weak reference instead of calling `deinit()` - **In `finalize()`**: Properly call `deinit()` on the JSRef - **Remove problematic assertion**: JSRef allows safe access to JS value via weak reference even after stop ## Benefits - ✅ No more assertion failures when stopping servers with pending requests - ✅ In-flight requests can still access the server JS object safely - ✅ JS object can be garbage collected when appropriate - ✅ Maintains backward compatibility - no external API changes ## Test plan - [x] Reproduces the original assertion failure - [x] Verifies the fix resolves the issue - [x] Adds regression test to prevent future occurrences - [x] Confirms normal server functionality still works The fix includes a comprehensive regression test at `test/regression/issue/server-stop-with-pending-requests.test.ts`. 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Claude Bot <claude-bot@bun.sh> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>