Git worker thread OOM crash (SIGABRT) when workspace contains nested git repos and large directory trees

Open 💬 2 comments Opened Jun 10, 2026 by russellweiss
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the Codex App are you using (From "About Codex" dialog)?

  • 26.608.12217 (build 3722) — latest crash
  • Also reproduced on 26.602.71036, 26.602.40724, 26.601.21317

What subscription do you have?

Pro plan

What platform is your computer?

  • macOS 26.5.1 (25F80)
  • Apple Silicon / arm64
  • 128 GB RAM
  • Bundle: com.openai.codex

What issue are you seeing?

Codex Desktop repeatedly crashes with SIGABRT on the git worker thread due to a V8 heap OOM. I have 12 crash reports spanning June 4–9, all with an identical stack signature. The crashes have been accelerating — 6 on June 9 alone, across two different app versions.

Unlike #26685 (where the git worker accidentally runs against the home directory), in my case the workspace root is correctly scoped to a specific project directory. However, the project has a structure that the git worker cannot handle:

  • A root .git repository
  • 5 nested subdirectories, each containing their own independent .git repo (full git directories, not worktree links)
  • One subdirectory with 580+ sub-subdirectories (a content repository)
  • A node_modules/ tree with 400+ package directories
  • A worker-worktrees/ directory with 36 entries

The git worker thread appears to recursively process this entire tree without any memory bound, exhausting the V8 heap and calling abort().

Crash signature (identical across all 12 reports)
Exception:   EXC_CRASH (SIGABRT)
Termination: Abort trap: 6
Faulting thread: "git" (Node.js worker)

Thread (git):
  0: libsystem_kernel.dylib    __pthread_kill + 8
  1: libsystem_pthread.dylib   pthread_kill + 296
  2: libsystem_c.dylib         abort + 148
  3: Codex Framework            node::OOMErrorHandler(char const*, v8::OOMDetails const&) + 344
  4: Codex Framework            v8::ToExternalPointerTag(unsigned short) + 468
  5: Codex Framework            v8::ToExternalPointerTag(unsigned short) + 352
  6: Codex Framework            v8::internal::OptimizingCompileTaskExecutor::RunCompilationJob(...) + 445400
  ...
  30: Codex Framework           node::InternalCallbackScope::Close() + 716
  31: Codex Framework           node::InternalMakeCallback(...) + 464
  32: Codex Framework           node::AsyncWrap::MakeCallback(...) + 280
  33: Codex Framework           _register_external_reference_process_wrap(...) + 7600
  34: Codex Framework           uv__wait_children + 268
  35: Codex Framework           uv__io_poll + 1500
  36: Codex Framework           uv_run + 972
  37: Codex Framework           node::SpinEventLoopInternal(node::Environment*) + 480
  38: Codex Framework           node::worker::Worker::Run() + 4916

The uv__wait_children → process_wrap → MakeCallback → OOM pattern suggests the worker spawns a child git process, receives massive output back, and OOMs trying to allocate the result string in V8.

Steps to reproduce

  1. Create a project directory containing:
  • A root .git repository
  • Multiple subdirectories that each contain their own independent .git directory (not worktree links)
  • At least one subdirectory with hundreds of entries (e.g., a content repo or assets folder)
  • A node_modules/ tree with hundreds of packages
  1. Open this directory as the workspace root in Codex Desktop.
  2. Use the app normally (start a thread, run any task).
  3. The git worker thread will crash within minutes, taking down the entire app.

Expected behavior

  1. The git worker thread should have a memory cap — if the V8 heap approaches its limit, it should abort the current git operation and degrade gracefully (e.g., disable git features for that workspace) rather than crashing the entire desktop app.
  2. The git worker should not recursively descend into nested independent git repos. It should respect .git boundaries and only process the top-level repository.
  3. Large git command output should be streamed or capped rather than buffered entirely into a V8 string allocation.

Additional information

  • Related: #26685 (same OOM crash signature, but triggered by cwd being set to the home directory — a different root cause)
  • Related: #26079 (same crash pattern reported by another user)
  • Removing the home directory from config.toml trusted projects (as suggested in #26685) does not fix this — the crash persists when the workspace root is correctly scoped but the project tree is large.
  • Session logs confirm the workspace root is correctly set to the project directory at crash time.
  • All crash reports available in ~/Library/Logs/DiagnosticReports/Codex-2026-06-0*.ips

View original on GitHub ↗

2 Comments

github-actions[bot] contributor · 2 months ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #26884
  • #26685
  • #26357
  • #26079

Powered by Codex Action

0xdevalias · 2 months ago

Possibly related concrete Desktop Git-worker defect identified in #27570:

The trigger also involves nested independent Git repositories and a large visible tree, but the observed failure mode is different and more specific:

  • review-summary attempts a bulk git hash-object --no-filters operation;
  • nested-repository directory entries cause fatal: Unable to hash (null);
  • the error fallback launches one git hash-object subprocess per path using an unbounded Promise.all;
  • 5,042 paths therefore produced 5,042 concurrent direct Git children and 5,042 transient zombies;
  • cancellation of the outer review request is not passed into this hashing path.

This may be one mechanism contributing to Git-worker memory/process pressure in nested-repository workspaces. I have kept it as a separate issue because #27382 reports V8 OOM, while #27570 has a deterministic subprocess-fanout root cause.