Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Nov 6, 2025

Summary of the Pull Request

Addresses memory leak in OOBEWindow where the escape key KeyboardAccelerator.Invoked event handler was subscribed but never unsubscribed, preventing proper garbage collection of the window and page objects.

PR Checklist

  • Closes: Part of wslsettings: allow OOBE window to close with escape key #13686
  • Communication: I've discussed this with core contributors already. If work hasn't been agreed, this work might be rejected
  • Tests: Added/updated if needed and all pass
  • Localization: All end user facing strings can be localized
  • Dev docs: Added/updated if needed
  • Documentation updated: If checked, please file a pull request on our docs repo and link it here: #xxx

Detailed Description of the Pull Request / Additional comments

Root cause: Event subscription without cleanup creates reference cycle preventing GC.

Changes:

  • Added escapeAccelerator and page fields to track lifecycle
  • Extracted cleanup logic into CleanupEscapeAccelerator() method
  • Unsubscribe event handler and remove accelerator from collection in Dispose()
  • Added defensive cleanup in OnWindowActivated() before creating new accelerator
private void CleanupEscapeAccelerator()
{
    if (escapeAccelerator != null)
    {
        escapeAccelerator.Invoked -= OnCloseKeyboardAcceleratorInvoked;
        page?.KeyboardAccelerators.Remove(escapeAccelerator);
        escapeAccelerator = null;
    }
    page = null;
}

Validation Steps Performed

Code review completed. Full build and runtime testing requires Windows with Visual Studio (current environment is Linux).


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copy link
Contributor Author

Copilot AI commented Nov 6, 2025

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 1oavsblobprodcus350.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/777B6CC405D19BB091B1730BAD80B769/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 1s1vsblobprodcus386.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/9C8ADA15032753F539EF2624306D199E/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 37cvsblobprodcus359.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/F4E345C841DA77E68A135758C8C193F3/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 5dkvsblobprodcus355.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/76DECDE965FC69B565D84C8811358126/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 6s7vsblobprodcus313.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/7F0AD5B89EC078FE77CFD6BDA2F52E08/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • cflvsblobprodcus383.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/E7821C1D735B7B74EC2D8FBC5687D15A/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • ckzvsblobprodcus347.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/F31145A4DBB2FF8BDC33A23A7806A07C/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • gervsblobprodcus329.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/042EF07C476C9D021FD9277657107FFC/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • josvsblobprodcus372.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/506CFBE8BDA6FD8181FC8ED63994F906/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • jrqvsblobprodcus343.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/E89EB3C1EA0D230B7927398F5FD1F1FD/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • kgfvsblobprodcus314.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/B86D4EBFBAE843E7C1DDFE86945610BB/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • kmuvsblobprodcus389.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/446FD05360E67E5619A8ED1478D06FA2/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • kxqvsblobprodcus376.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/647C64FDD74299326E39E07FE236C432/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • l7avsblobprodcus319.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/A97C6D529877C9C476811026D6CFA0D1/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • m16vsblobprodcus374.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/71F144D101874EC242988DF65A1E0888/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • nn8vsblobprodcus340.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/93F4B156C2AC7510375487F3B071BA8C/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • p2ovsblobprodcus312.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/3951ADD19F983D5DAC9F6BEB2378BF47/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • ukkvsblobprodcus352.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/8CB7AECE6DD7070AC045D7D8E723E44A/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • vwvvsblobprodcus334.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/67B4128E2B4C12F8D6E830AE22935BA4/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • ytvvsblobprodcus310.vsblob.vsassets.io
    • Triggering command: dotnet restore --no-dependencies /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/C08286DDCB284A178BD71E2B2D1C915F/missingpackages_workingdir --packages /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /home/REDACTED/work/WSL/.codeql-scratch/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title [WIP] Update OOBE window escape key functionality based on feedback Fix memory leak in OOBE window escape key handler Nov 6, 2025
Copilot AI requested a review from benhillis November 6, 2025 19:37
@benhillis benhillis closed this Nov 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants