Skip to content

Mysterious hang in Monarch::_getMostRecentPeasantID #11215

Closed

Description

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})

Activity

  1. ghost added
    Needs-TriageIt's a new issue that the core contributor team needs to triage at the next triage meeting
    on Sep 13, 2021
  2. ghost added
    Needs-Tag-FixDoesn't match tag requirements
    on Sep 13, 2021
  3. zadjii-msft commented on Sep 13, 2021

    @zadjii-msft
    MemberAuthor

    Note to self: those repro steps did repro this on 1.12.2521, so this has got to be fairly new. This should be easy enough to write a test for.

  4. Rosefield commented on Sep 13, 2021

    @Rosefield
    Contributor

    Curious if this is would be fixed in #11189. You of course collected the list of changes to the monarch I made, mostly around adding extra events on open/close of a peasant that can cause some churn. I didn't touch _getMostRecentPeasantId or _getPeasant so it might just be heap corruption from simultaneously removing peasants and iterating.

  5. Rosefield commented on Sep 13, 2021

    @Rosefield
    Contributor

    Looking at the code again, the issue might be that in SignalClose I remove from the peasants map, but don't remove from _mruPeasants? Happy to fix this either on its own, or in the above PR with the other changes.

    https://github.com/microsoft/terminal/blob/main/src/cascadia/Remoting/Monarch.cpp#L148

  6. ghost added
    In-PRThis issue has a related PR
    on Sep 13, 2021
  7. zadjii-msft commented on Sep 13, 2021

    @zadjii-msft
    MemberAuthor

    See, I knew I could file this, go to lunch, and come back to an answer 😝 Thanks for helping ID this. I'm okay combining this into #11189, so long as we make sure to add a test for this specific case. I just want to have as many tests on this stuff as possible.

    Of course I type like a 2nd grader so while I was typing this, you filed the PR 😅. Doing it separately works too!

  8. ghost closed this as completedin #11217on Sep 14, 2021
  9. ghost removed
    In-PRThis issue has a related PR
    on Sep 14, 2021
  10. ghost added
    Resolution-Fix-CommittedFix is checked in, but it might be 3-4 weeks until a release.
    on Sep 14, 2021
  11. ghost added a commit that references this issue on Sep 14, 2021
    b4a40ff
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Area-RemotingCommunication layer between windows. Often for windowing behavior, quake mode, etc.Issue-BugIt either shouldn't be doing this or needs an investigation.Needs-Tag-FixDoesn't match tag requirementsNeeds-TriageIt's a new issue that the core contributor team needs to triage at the next triage meetingPriority-1A description (P1)Product-TerminalThe new Windows Terminal.Resolution-Fix-CommittedFix is checked in, but it might be 3-4 weeks until a release.Severity-BlockingWe won't ship a release like this! No-siree.

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions