[PR #18215] Remove Monarch/Peasant & Make UI single-threaded #31476

Closed
opened 2026-01-31 09:47:30 +00:00 by claunia · 0 comments
Owner

Original Pull Request: https://github.com/microsoft/terminal/pull/18215

State: closed
Merged: Yes


As before, a minor refactor:

  • I started off by removing the Monarch/Peasant with the goal of moving
    it into and deduplicating its functionality with WindowEmperor.
  • Since I needed a replacement for the Monarch (= ensures that there's
    a single instance), I wrote single-instance code with a NT mutex
    and by yeeting data across processes with WM_COPYDATA.
  • This resulted in severe threading issues, because it now started up
    way faster. The more I tried to solve them the deeper I had to dig,
    because you can't just put a mutex around CascadiaSettings.
    I then tried to seeif WinUI can run multiple windows on a single
    thread and, as it turns out, it can.
    So, I removed the multi- from the window threading.
  • At this point I had dig about 1 mile deep and brought no ladder.
    So, to finish it up, I had to clean up the entire eventing system
    around WindowEmperor, cleaned up all the coroutines,
    and cleaned up all the callbacks.

Closes #16183
Closes #16221
Closes #16487
Closes #16532
Closes #16733
Closes #16755
Closes #17015
Closes #17360
Closes #17420
Closes #17457
Closes #17799
Closes #17976
Closes #18057
Closes #18084
Closes #18169
Closes #18176
Closes #18191

Validation Steps Performed

  • It does not crash
  • New/close tab
  • New/close window
  • Move tabs between windows
  • Split tab into new window
  • Persist windows on exit / restore startup
**Original Pull Request:** https://github.com/microsoft/terminal/pull/18215 **State:** closed **Merged:** Yes --- As before, a minor refactor: * I started off by removing the Monarch/Peasant with the goal of moving it into and deduplicating its functionality with `WindowEmperor`. * Since I needed a replacement for the Monarch (= ensures that there's a single instance), I wrote single-instance code with a NT mutex and by yeeting data across processes with `WM_COPYDATA`. * This resulted in severe threading issues, because it now started up way faster. The more I tried to solve them the deeper I had to dig, because you can't just put a mutex around `CascadiaSettings`. I then tried to seeif WinUI can run multiple windows on a single thread and, as it turns out, it can. So, I removed the multi- from the window threading. * At this point I had dig about 1 mile deep and brought no ladder. So, to finish it up, I had to clean up the entire eventing system around `WindowEmperor`, cleaned up all the coroutines, and cleaned up all the callbacks. Closes #16183 Closes #16221 Closes #16487 Closes #16532 Closes #16733 Closes #16755 Closes #17015 Closes #17360 Closes #17420 Closes #17457 Closes #17799 Closes #17976 Closes #18057 Closes #18084 Closes #18169 Closes #18176 Closes #18191 ## Validation Steps Performed * It does not crash ✅ * New/close tab ✅ * New/close window ✅ * Move tabs between windows ✅ * Split tab into new window ✅ * Persist windows on exit / restore startup ✅
claunia added the pull-request label 2026-01-31 09:47:30 +00:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#31476