[BUG] v2.1.233 hangs indefinitely on startup (even --version) — pre-main futex deadlock; v2.1.226 works

Status Open
Reported on v2.1.233
Maintainer reply None cached
Activity 1 comment · opened Aug 18, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Claude Code 2.1.233 (native installer) hangs forever on ANY invocation, including claude --version. No output, no error message, no prompt — the process must be killed manually. It hangs identically in an empty directory, so this is not project/config related.

Downgrading to 2.1.226 on the same machine (curl -fsSL https://claude.ai/install.sh | bash -s stable) fully resolves it, so this is a regression introduced between 2.1.226 and 2.1.233.

strace shows the process deadlocks within milliseconds of startup, before doing anything meaningful: the binary starts, mimalloc initializes and spawns its mi-scavenger thread, then the main thread parks permanently on futex(..., FUTEX_WAIT_BITSET_PRIVATE, 0, NULL, ...) with no timeout. After that: zero further syscalls — no config files opened, no network calls, no additional threads.

Ruled out during debugging:

  • Config/project: hangs identically in an empty dir and with --version
  • Network/DNS: no network syscalls appear before the hang
  • CPU features: AVX and AVX2 both present in guest /proc/cpuinfo
  • Entropy: getrandom() succeeded instantly in the trace
  • Disk space, stale locks: checked, fine

What Should Happen?

claude --version should print the version and exit; claude should reach the interactive prompt.

Error Messages/Logs

3788  getrandom("\x6b\xd5...", 32, GRND_NONBLOCK) = 32
3790  prctl(PR_SET_NAME, "mi-scavenger") = 0
3788  mmap(0x5db15800000, 1073741824, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x5db15800000
3788  madvise(0x5db15800000, 1073741824, MADV_NOHUGEPAGE) = 0
3788  sigaltstack(...) = 0
3788  rt_sigaction(SIGSEGV/SIGILL/SIGBUS/SIGFPE/SIGABRT/SIGTRAP, ...) = 0
3790  futex(0x5559898, FUTEX_WAIT_PRIVATE, 0, {tv_sec=30, tv_nsec=0}) 
3788  futex(0x56fafe4, FUTEX_WAIT_BITSET_PRIVATE, 0, NULL, FUTEX_BITSET_MATCH_ANY)   <-- hangs here forever
(process killed manually; no further syscalls after this point)

Steps to Reproduce

  1. Environment: Ubuntu guest in VirtualBox (4 vCPUs, AVX2 exposed), recent kernel (MADV_GUARD_INSTALL succeeds in the trace, i.e. 6.13+)
  2. Install Claude Code 2.1.233 via the native installer: curl -fsSL https://claude.ai/install.sh | bash
  3. Run: claude --version
  4. Observe: indefinite hang, no output. Same with plain claude, in any directory including an empty one.
  5. Downgrade: curl -fsSL https://claude.ai/install.sh | bash -s stable (installs 2.1.226)
  6. claude --version now prints "2.1.226 (Claude Code)" immediately.

Claude Model

Not sure / Multiple models

Is this a regression?

Yes, this worked in a previous version

Last Working Version

2.1.226

Claude Code Version

2.1.233

Platform

Anthropic API

Operating System

Ubuntu/Debian Linux

Terminal/Shell

VS Code integrated terminal

Additional Information

Runs inside a VirtualBox VM:

  • Host OS: Ubuntu 24.04 LTS
  • VirtualBox version: 7.2.14 r174565 (Qt6.8.0 on xcb)
  • Guest: Ubuntu 26.04 LTS
  • Kernel: Linux claudedevvm 7.0.0-29-generic #29-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 17 20:52:35 UTC 2026 x86_64 GNU/Linux
  • 4 vCPUs, AVX/AVX2 present in guest /proc/cpuinfo

Full strace log attached (strace -f of claude --version on 2.1.233).

Workaround: pin to 2.1.226 via bash -s stable and set "autoUpdates": false in ~/.claude/settings.json.

claude-trace.txt

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗