Mysterious hang in Monarch::_getMostRecentPeasantID #15197

Open
opened 2026-01-31 04:31:14 +00:00 by claunia · 0 comments
Owner

Originally created by @zadjii-msft on GitHub (Sep 13, 2021).

Originally assigned to: @zadjii-msft on GitHub.

version 1.12.2521.0.
Unsure how I got into this state. Probably

  • open windows 1, 2, 3. 1 is not the MRU window.
  • Close 2 and 3.
  • Try globalSummon the window. Terminal is in an infinite loop now inside Monarch::_getMostRecentPeasantID

but my repo's in the middle of a weird merge ATM so I can't verify on main

The symbols for this build don't include accurate source info, or at least my windbg is fucky. But what seems to be happening is _getMostRecentPeasantID is in the while (_mruPeasants.cbegin() + positionInList < _mruPeasants.cend()) loop. We're looking for ID=3, which we don't find in the list of peasants, so _getPeasant ends up returning null. We determine that we should have cleaned out that peasant ID from the MRU entries at that point, so we try again. However, we didn't. The MRU list still contains 3 at index 0, so we go looking for it again.

auto maybeThePeasant = peasantSearch == _peasants.end() ? nullptr : peasantSearch->second; in Monarch::_getPeasant ends up setting maybeThePeasant to null, which we then happily return (without cleaning up any MRU entries for it).

absolutely baseless list of possible commits to investigate:

I did not have the tray icon enabled.

Filing on myself so I don't lose this, but I don't think I'm getting anything more out of this debugger

There's no valuable logs other than a million Monarch_Collect_WasDead(Id=3, Desktop={guid})

Originally created by @zadjii-msft on GitHub (Sep 13, 2021). Originally assigned to: @zadjii-msft on GitHub. version **1.12.2521.0**. Unsure how I got into this state. Probably * open windows 1, 2, 3. 1 is not the MRU window. * Close 2 and 3. * Try `globalSummon` the window. Terminal is in an infinite loop now inside `Monarch::_getMostRecentPeasantID` but my repo's in the middle of a weird merge ATM so I can't verify on `main` The symbols for this build don't include accurate source info, or at least my windbg is fucky. But what seems to be happening is `_getMostRecentPeasantID` is in the `while (_mruPeasants.cbegin() + positionInList < _mruPeasants.cend())` loop. We're looking for ID=3, which we don't find in the list of peasants, so `_getPeasant` ends up returning null. We determine that we _should_ have cleaned out that peasant ID from the MRU entries at that point, so we try again. However, we didn't. The MRU list still contains 3 at index 0, so we go looking for it again. `auto maybeThePeasant = peasantSearch == _peasants.end() ? nullptr : peasantSearch->second;` in `Monarch::_getPeasant` ends up setting `maybeThePeasant` to `null`, which we then happily return (without cleaning up any MRU entries for it). absolutely baseless list of possible commits to investigate: * #11143 * #11043 * #10972 I did not have the tray icon enabled. Filing on myself so I don't lose this, but I don't think I'm getting anything more out of this debugger There's no valuable logs other than a million `Monarch_Collect_WasDead(Id=3, Desktop={guid})`
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#15197