Repository navigation
Drain finalizers periodically in bestfit-finalize when multithreading is unsupported - #134996
Merged
Merged
Conversation
Browser CoreCLR schedules finalizers on the JS event loop, which the test's synchronous allocation loop never yields to, so dead requests (and their pinned handles) are never released and the test OOMs. Fixes #132107 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Azure Pipelines: Successfully started running 3 pipeline(s). 13 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
Contributor
|
Tagging subscribers to this area: @anicka-net, @dotnet/gc |
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
jkotas
approved these changes
Oct 1, 2026
lewing
enabled auto-merge (squash)
October 1, 2026 01:10
3 tasks
Member
Author
|
/ba-g slow Mac |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Browser and WASI builds without multithreading have no finalizer thread, so finalizers run from the host event loop (on browser,
SystemJS_ScheduleFinalizationusessetTimeout(..., 0)).bestfit-finalize'sGo()loop allocates requests synchronously and never yields. As a result, noRequestfinalizer runs, the pinnedGCHandles and survivor arrays of dead requests are never released, and the test OOMs at ~3.8 GB.When
RuntimeFeature.IsMultithreadingSupportedis false, the test now callsGC.WaitForPendingFinalizers()once everyNumRequestsiterations. That call drains pending finalizers synchronously. The random sequence, allocation volume, pinning, and pass/fail conditions are unchanged, and no explicit collections are added. Platforms that support multithreading are unaffected.This is a test workaround. It does not fix the runtime: any synchronous allocation loop without a finalizer thread can starve finalizers the same way.
Validation
1 200 10000. It passed.Resolves #132107
Note
This PR description was generated with GitHub Copilot.