Repository navigation
Description
Windows Terminal version
1.27.2861.0 (Canary, x64)
Windows build number
10.0.26300.9711
Other Software
- Claude Code 2.1.319, which prints OSC 8 hyperlinks
- Device: Intel Core i7-1185G7, 32 GB RAM, Intel Iris Xe Graphics (driver 32.0.101.7085), one 60 Hz display
- Canary settings that affect rendering:
theme: system,useAcrylic: false,useAcrylicInTabRow: false,rendering.disablePartialInvalidation: true, opacity not set (100%)
Steps to reproduce
- In a tab running Claude Code, hover an https OSC 8 hyperlink it printed. The "Ctrl+Click link to open" tooltip appears.
- Ctrl+Click the link.
This is the first occurrence, and I have not reproduced it. At the time, the Canary process had been running for 10 days with about 20 tabs and 1.1 GB of private bytes.
Expected Behavior
The tooltip closes and the UI keeps responding.
Actual Behavior
- The link opened in the browser.
- The tooltip stayed on screen. Tabs, the tab row, and window switching stopped responding.
- Typing into the focused tab still worked, and its text kept rendering.
- Minimizing and restoring the window removed the tooltip. The rest of the UI stayed frozen.
- Launching Canary again did not open a window. Typing in the existing window then stopped working too.
- Ctrl+Alt+Del, lock/unlock, and a graphics driver reset (Win+Ctrl+Shift+B) did not recover it. Ending the process did.
Trace findings
A WPR trace (GeneralProfile + CPU) covers about 20 s of clicking tabs, typing, and launching a new Canary window. The XAML layer processes input but never renders a frame:
| Observation | Evidence |
|---|---|
| The UI thread is not blocked | Idle in GetMessageW between inputs; GetGUIThreadInfo reports no capture, menu mode, or move/size loop |
| Clicks reach Terminal | TabViewItem::OnPointerReleased → Selector::RaiseSelectionChanged → TerminalApp.dll handler |
| The new-window request arrives | The second process exits after 68 ms; the UI thread handles WM_COPYDATA and constructs a DesktopWindowXamlSource. The window stays invisible. |
| No XAML render ticks in Canary | 0 stacks with CXcpDispatcher::Tick / CCoreServices::NWDrawTree out of 3,512 XAML stacks |
| Other XAML processes render normally | explorer.exe 161, StartMenuExperienceHost 123, SearchHost 38, stable Windows Terminal 1.24 44 tick stacks in the same ranges |
| No frame scheduling in Canary | No Canary thread ran UIThreadScheduler::RequestAdditionalFrame, QueueTick, CompositorScheduler::RenderThreadMain, or WaitForVBlank |
Memory dump findings
The dump was taken while the UI was frozen.
- Every thread is idle. The UI thread is in
GetMessageW, and XAML's render thread waits inCompositorScheduler::RenderThreadFrame→CWindowsServices::WaitForObjects. - The dump doesn't contain any stowed exceptions.
- A
windows.storage!MessagePumpThreadProcthread and acombase!CDllHost::STAWorkerLoopthread are idle in the process, consistent with the earlierShellExecuteExWcall.
Related code (main at 188822f)
TerminalPage.cpp#L3317-L3327: Ctrl+Click on an https link callsShellExecuteExWsynchronously on the UI thread, from a dispatcher callback (TermControl.cpp#L3212). The comment there notes thatShellExecutepumps the UI thread's messages (GH#7994).AppHost.cpp#L1275-L1282: a new window callsShowWindowonly after a Low-priorityresume_foreground. If XAML stops running dispatcher work, the window stays hidden, matching the invisible windows observed.
One hypothesis, unconfirmed: the nested message loop inside ShellExecuteExW re-entered XAML while it was processing the tooltip or pointer input, and left XAML's frame scheduling in a state where it never requests another tick.
Attached:
canary-freeze-summary.txt: tick counts per process, Canary samples per thread, top UI-thread framescanary-freeze-ui-thread-tree.txt: UI-thread call tree (1,366 samples)
Frames in Terminal's own modules are module-relative addresses. PDB identities:
| Module | PDB GUID (age 1) |
|---|---|
| WindowsTerminal.exe | af8a6265-134a-4602-bf54-590ac8c2501e |
| TerminalApp.dll | e22e6bf0-77f1-4deb-81b1-5affc487cdeb |
| Microsoft.Terminal.Control.dll | 6c07b4ad-601b-47b6-a930-69bc21893bb0 |
A full memory dump and the ETL are available privately on request.
Activity
Prantik-1811 commentedon Nov 7, 2026
Hello everyone,
I'll look into this issue