CRITICAL / App-Unusable: Codex macOS Spawns Runaway computer-use Threads Until Dispatch Thread Exhaustion and Fatal V8 OOM Crash
What version of the Codex App are you using (From “About Codex” dialog)?
26.810.52044 (6662)
What subscription do you have?
Pro
What platform is your computer?
Darwin 25.5.0 arm64 arm
What issue are you seeing?
Translated Report (Full Report Below)
-------------------------------------
Process: ChatGPT [65580]
Path: /Applications/ChatGPT.app/Contents/MacOS/ChatGPT
Identifier: com.openai.codex
Version: 26.810.52044 (6662)
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.openai.codex [1509]
User ID: 501
Date/Time: 2026-08-16 20:40:35.5802 -0700
Launch Time: 2026-08-16 20:39:08.7702 -0700
Hardware Model: Mac16,10
OS Version: macOS 26.5.2 (25F84)
Release Type: User
Time Awake Since Boot: 5700 seconds
System Integrity Protection: enabled
Triggered by Thread: 10 V8Worker
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: Namespace SIGNAL, Code 6, Abort trap: 6
Terminating Process: ChatGPT [65580]
Dispatch Thread Soft Limit Reached: 64 (too many dispatch threads blocked in synchronous operations)
Application Specific Information:
abort() called
What steps can reproduce the bug?
You can reproduce the issue very reliably with the following steps:
Launch the Codex macOS desktop app normally.
Do not perform any special configuration changes. The issue still occurs even after removing ~/.codex/config.toml.
Leave the app running for roughly 1–2 minutes.
Observe the ChatGPT/Codex process thread count continuously increasing instead of stabilizing. In my case it grows from around 200 threads to 250–300+ threads within a short period.
The application then becomes increasingly unstable and crashes consistently.
The crash report shows that a large number of computer-use workers are blocked in synchronous Apple Event / RemoteHostedPIPContentService calls, eventually hitting:
Dispatch Thread Soft Limit Reached: 64 (too many dispatch threads blocked in synchronous operations)
Shortly afterward, the app terminates with SIGABRT from node::OOMErrorHandler, making Codex effectively unusable because the crash can recur shortly after every launch.
This appears to be a severe, reproducible runaway worker/thread leak rather than an isolated crash or configuration issue. In the attached crash report, the app launched at 20:39:08 and crashed at 20:40:35—about 87 seconds later. The report also explicitly records the dispatch-thread exhaustion and abort() condition.
What is the expected behavior?
_No response_
Additional information
_No response_
9 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Same issue here
Same issue here
same issue here
Same issue here
The crash problem is still present in the latest version. After updating to the newest release, the application continues to crash frequently and the issue remains fully reproducible.
This bug significantly impacts normal usage, as the application becomes unstable and cannot be reliably used. Please investigate the root cause based on the crash reports and prioritize a fix.
Same leak on macOS 15.7.9 (Sequoia), so this is not specific to macOS 26.5.2 — the open question in the community thread.
Env: ChatGPT desktop 26.810.52044 (build 6662),
com.openai.codex, Apple Silicon, ARM-64 native, macOS 15.7.9 (24G830).Growth, sampled every 10s, app launched and left completely idle:
| time | threads | RSS |
| --- | --- | --- |
| 21:49:26 | 215 | 2,657 MB |
| 21:49:36 | 257 | 3,865 MB |
| 21:49:46 | 300 | 5,110 MB |
| 21:49:56 | — | process gone |
That is ~4.2 threads/sec and ~122 MB/sec, with an identical slope across both intervals — strictly linear, no plateau.
Possible signal: my rate is ~1.7x the previously reported 2.5 threads/sec and 70 MB/sec, and my dispatch soft limit is 80 rather than 64. If the spawn rate scales with dispatch width or core count, the loop may be driven by available concurrency rather than a fixed timer.
At this point, this bug has been going on for three weeks, so I’m starting to develop a slightly ridiculous theory:
Maybe nobody inside OpenAI actually uses Codex for day-to-day development or testing — perhaps everyone has quietly switched to Claude Code. 😄
I found a reliable workaround for this issue on macOS.
The crash appears to be triggered when
~/.codexis a symbolic link and Codex uses the symlink path instead of the resolved physical path.For example:
Both paths point to exactly the same directory, but the Codex app currently appears to treat:
and:
as different paths in some parts of the app.
This can eventually trigger the runaway
computer-useworker/thread leak and crash.This matches the investigation in #39732, where using the symlink path reproduced the crash consistently, while using the real path for the exact same directory made the app stable.
Workaround
You do not need to remove the
~/.codexsymlink.Instead, explicitly set
CODEX_HOMEto the resolved physical path.1. Check whether
~/.codexis a symlinkFor example:
2. Get the real physical path
Example:
Do not use:
as
CODEX_HOME, because that is still the symlink path.---
Option 1: Set it permanently in
~/.zshrcThis works on my macOS setup:
Replace
/Volumes/Data/.codexwith the output of:Verify:
It should print the real path, for example:
You can also configure it automatically from the existing symlink:
---
Option 2: Set it for the macOS GUI session
If the app is launched from Finder/Dock and does not inherit the shell environment, use:
Verify:
Then completely quit ChatGPT/Codex and reopen it.
For example:
This is also the workaround demonstrated in #39732:
With the symlink path, the issue reproduced consistently; with the resolved real path, the app remained stable.
---
Recommended setup
My current setup is therefore:
The symlink is kept for compatibility, but Codex itself is explicitly given:
instead of:
In other words:
You can verify both values with:
If necessary:
Then completely quit and restart the app.
Why this works
The important part is not moving or changing the
.codexdata.The same directory can behave differently depending only on the path string used to access it:
The investigation in #39732 reproduced this with the same directory, same inode, and same data. Only the
CODEX_HOMEpath string changed.The likely permanent fix in Codex itself is to canonicalize
CODEX_HOMEwithrealpath()before storing or comparing paths.Until that is fixed, explicitly setting
CODEX_HOMEto the physical path is a reliable workaround and allows the existing~/.codexsymlink to remain in place.