CodexDockTilePlugin infinite recursion crash in setDockTile:
Open 💬 4 comments Opened Jun 15, 2026 by jasony009
Bug Report: CodexDockTilePlugin infinite recursion crash
Summary
CodexDockTilePlugin crashes immediately on load due to infinite recursion in setDockTile:, taking down the macOS Dock's com.apple.dock.external.extra.arm64 XPC process.
Environment
- Codex Version: 26.609.41114 (Build 3888)
- macOS: 26.5.1 (25F80)
- Hardware: MacBookPro18,2 (M1 Max, 64GB RAM)
- SIP: Enabled
Crash Details
- Process:
com.apple.dock.external.extra.arm64 - Plugin:
CodexDockTilePlugin.plugin(com.openai.codex.dock-tile-plugin) - Crash Type: Stack overflow (recursion level 37,331)
- Time to Crash: ~206ms after launch
Stack Trace
0 libobjc.A.dylib objc_storeStrong + 4
1 CodexDockTilePlugin -[CodexDockTilePlugin_com_openai_codex setDockTile:] + 40
2 CodexDockTilePlugin -[CodexDockTilePlugin_com_openai_codex setDockTile:] + 224
-------- RECURSION LEVEL 37331 --------
Root Cause Analysis (from disassembly)
In -[CodexDockTilePlugin_com_openai_codex setDockTile:], at offset 0x0bc4, the method calls itself directly:
0x0bc0: ldur x0, [x29, #-0x8] ; x0 = self
0x0bc4: bl objc_msgSend$setDockTile: ; [self setDockTile:self.dockTile] ← BUG
The pseudo-code logic:
- (void)setDockTile:(NSDockTile *)dockTile {
self.dockTile = dockTile;
if (self.preferenceObserver) {
[[NSNotificationCenter defaultCenter] removeObserver:self.preferenceObserver];
self.preferenceObserver = nil;
}
// ⚠️ BUG: calls itself, causing infinite recursion
[self setDockTile:self.dockTile];
// The following never executes:
// - Register new notification observer
// - Call updateDockTile
}
Trigger Conditions
- macOS wake from sleep
- External display connect/disconnect
- Any Dock restart
Workaround
Renaming CodexDockTilePlugin.plugin to disable it stops the crash.
Crash Report
Incident Identifier: B2956515-0C0C-4249-95C2-F5BBCC1FDCD3
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗