[BUG] Recurring idle SIGSEGV/SIGABRT in JSC (GC marking, microtask queue, JIT) on Linux x64 — Bun v1.4.1; fixed-looking bug in Bun 1.4.2
What's Wrong?
Claude Code (native Bun standalone build) crashes every day or two on Linux x64 with SIGSEGV/SIGABRT inside JavaScriptCore. Three core dumps in two days, all while the interactive session had been idle for 1–13 minutes (no tool calls in flight, transcript untouched). Each crash is at a different JSC site, which is the signature of a use-after-free rather than a bug in Claude Code's JS:
| Time (CEST) | Signal | Where (bun.report symbolization) | Session idle for |
|---|---|---|---|
| 2026-09-06 13:41 | SIGABRT | JIT-compiled code (frames in anonymous JIT memory) | ~90 min |
| 2026-09-06 22:28 | SIGSEGV @ 0x12 | JSC::runInternalMicrotask → uncheckedDowncast<JSPromiseCombinatorsGlobalContext> → asCell | ~90 s |
| 2026-09-07 19:10 | SIGSEGV @ 0x044F7E63 | JSC::MarkingConstraintSolver::runExecutionThread → RefPtr::operator= → ThreadSafeRefCounted::ref (GC fixpoint phase, Heap::collectInMutatorThread from Bun__JSC_onBeforeWait) | ~13 min |
Ruled out: no OOM (31 GB RAM, 22 GB available, no OOM-killer entries), no kernel hardware errors, sessions were not using images or subagents at the time (one used the Playwright MCP earlier).
Likely cause: Claude Code 2.1.260 and 2.1.263 both embed Bun v1.4.1 (83c373b27). Bun v1.4.2 (2026-09-05) release notes include:
Fixed: a rare crash in long-running processes after a prototype that JIT-optimized code had cached property lookups through was garbage-collected.
That matches this pattern exactly (long-running process, GC-triggered, scattered crash sites incl. JIT code and GC marking). Request: bump the bundled Bun to ≥ 1.4.2.
Workaround that appears to work: BUN_JSC_useJIT=0 in the environment (verified Bun accepts it; Claude Code runs fine, just more CPU for rendering).
What Should Happen?
Idle interactive sessions should not crash the process.
Error Messages/Logs
Symbolized Bun crash reports (extracted from the cores):
- 2026-09-07 19:10 (GC marking): https://bun.report/1.4.1/l_183c373bmgkgkQuhogC+ts8pE4y/qpE81p8pEgwn8pE+8topEg8jopE45n1pE6xv6pE6yyqpEmmt2qCq0sr/B6hi96Bi/6rgC08xqgC+u6qiCg47Jwr8J6itmyBA2Amm/9pE
- 2026-09-06 22:28 (microtask queue): https://bun.report/1.4.1/l_183c373bmgkgkQuhogCs4ow1E63sh7Emmx39E4rj9mC__ms133Ds4uhrEk5v4xEu7wzkC4kvxsCkmto/Cum3piCwruo/Cqhi96Bi/6rgC08xqgC+u6qiCg47Jwr8JA2AkB
Crashing thread, 2026-09-07 19:10 (coredumpctl info, si_code SI_TKILL = re-raised by Bun's crash handler):
Signal: 11 (SEGV) si_code: SI_TKILL
Command Line: claude
Executable: ~/.local/share/mise/installs/claude/2.1.260/claude
#0 0x00007f18f409a17c n/a (libc.so.6 + 0x9a17c)
#1 0x00007f18f403e5d0 raise (libc.so.6 + 0x3e5d0)
#2 0x0000000003773cf2 n/a (claude + 0x3573cf2)
#3 0x00000000037730dd n/a (claude + 0x35730dd)
#4 0x0000000003773aa4 n/a (claude + 0x3573aa4)
#5 0x0000000003ad57cc n/a (claude + 0x38d57cc)
#6 0x00007f18f403e6f0 n/a (libc.so.6 + 0x3e6f0) <- signal trampoline; original fault below
#7 0x00000000044f18e0 n/a (claude + 0x42f18e0)
#8 0x00000000044abf2d n/a (claude + 0x42abf2d)
#9 0x00000000044f135f n/a (claude + 0x42f135f)
#10 0x00000000044f0f01 n/a (claude + 0x42f0f01)
#11 0x00000000044a1bd0 n/a (claude + 0x42a1bd0)
#12 0x00000000044a07c1 n/a (claude + 0x42a07c1)
#13 0x00000000044d4f9d n/a (claude + 0x42d4f9d)
#14 0x00000000044e9f1e n/a (claude + 0x42e9f1e)
#15 0x00000000044aa52e n/a (claude + 0x42aa52e)
#16 0x0000000002559a64 n/a (claude + 0x2359a64)
#17 0x0000000001fad946 n/a (claude + 0x1dad946)
#18 0x0000000001d7441e n/a (claude + 0x1b7441e)
#19 0x000000000202f5f2 n/a (claude + 0x1e2f5f2)
#20 0x000000000202a3cb n/a (claude + 0x1e2a3cb)
#21 0x000000000212b4f0 n/a (claude + 0x1f2b4f0)
#22 0x00007f18f4027781 n/a (libc.so.6 + 0x27781)
#23 0x00007f18f40278b9 __libc_start_main (libc.so.6 + 0x278b9)
Crashing thread, 2026-09-06 22:28 (claude --resume <id>):
Signal: 11 (SEGV) si_code: SI_TKILL
#6 0x00007fc3c023e6f0 n/a (libc.so.6 + 0x3e6f0) <- signal trampoline
#7 0x0000000004ac1187 n/a (claude + 0x48c1187)
#8 0x0000000004d8597e n/a (claude + 0x4b8597e)
#9 0x0000000004ede264 n/a (claude + 0x4cde264)
#10 0x00000000023746bd n/a (claude + 0x21746bd)
#11 0x00007fc3bd3e70c8 n/a (n/a + 0x0) <- JIT code
#12 0x00007fc3bd3e70ef n/a (n/a + 0x0)
#13 0x0000000003bdeac4 n/a (claude + 0x39deac4)
...
Full cores are available if useful (not attached: they contain session content).
Steps to Reproduce
- Install Claude Code 2.1.260 or 2.1.263 native build on Linux x64 (here via mise,
aqua:anthropics/claude-code). - Run
claudein a terminal, work normally for a few hours, leave it idle. - Within 1–2 days the process dies with "Segmentation fault" / abort while idle. Not deterministic.
Claude Model
Default (Opus / Fable)
Is this a regression?
I don't know
Claude Code Version
2.1.260 (Claude Code), also present in 2.1.263 (same Bun v1.4.1 83c373b27)
Platform
Linux (Arch / Omarchy), kernel 7.1.9-arch1-2, glibc from Arch current, AMD Ryzen 7 3700X, 32 GB RAM
Terminal
Alacritty/Ghostty under Hyprland (xdg-terminal-exec)
Install method
mise (native standalone binary)
Additional Context
Bun 1.4.2 release notes: https://bun.com/blog/bun-v1.4.2
Possibly related: #87868, #77579 (JSC GC UAF), oven-sh/bun#26843.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗