Port 126929 to 10.0 - #126977

Merged
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0
Apr 29, 2026
Merged

Port 126929 to 10.0#126977
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0

Conversation

@mangod9

@mangod9mangod9 commented Apr 16, 2026

Copy link
Copy Markdown
Member

Fixes#126903

Customer Impact

  • Customer reported
  • Found internally

GC heap corruption when DOTNET_GCLargePages=1 is enabled on Linux (#126903). . Reproducible by calling GC.Collect(2, GCCollectionMode.Aggressive, true, true) with large pages enabled, but also occurs in normal production workloads without aggressive GC.

Regression

  • Yes
  • No

This is a pre-existing bug in the GC's large-page decommit logic. When GCLargePages is enabled, the GC skips OS-level
decommits but still updates bookkeeping as if the decommit succeeded. This causes regions to be reused without being zeroed, leading to heap corruption. The bug has existed since Regions was enabled.

Testing

The fix was validated by the customer against their production workload.

Risk

Low. The fix clears decommitted memory in the large-pages scenario to ensure regions are properly zeroed before reuse. This is a targeted change to the GC's decommit path that only affects GCLargePages=1 configurations. The larger fix#127290 is made in .NET 11

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @dotnet/gc
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports the fix for #126903 to the 10.0 branch by ensuring memory that is logically decommitted while GCLargePages is enabled is also cleared, preventing stale object references from being observed when the region is later reused.

Changes:

  • Extends gc_heap::virtual_decommit with an optional end_of_data parameter to allow clearing memory when OS decommit is a no-op under large pages.
  • In the aggressive-induced GC path, passes heap_segment_used(region) so the GC clears stale reference-containing bytes when shrinking heap_segment_committed.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
src/coreclr/gc/gcpriv.hUpdates the virtual_decommit declaration to accept an optional end_of_data pointer.
src/coreclr/gc/gc.cppImplements large-page clearing in virtual_decommit and wires end_of_data from distribute_free_regions() for aggressive-induced decommits.

Comment threadsrc/coreclr/gc/gc.cpp
@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

@mangod9

Copy link
Copy Markdown
MemberAuthor

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

Yes, so far so good on the production test, will keep you posted if we run into anything on that front.

@mangod9

Copy link
Copy Markdown
MemberAuthor

ok will work on getting this approved for back port. Thanks!

@mangod9
mangod9 requested a review from janvorliApril 28, 2026 14:30
@mangod9mangod9 added the Servicing-consider Issue for next servicing release review label Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added this to the 10.0.x milestone Apr 28, 2026
@rbhandarbhanda modified the milestones: 10.0.x, 10.0.9Apr 28, 2026
@JulieLeeMSFT

Copy link
Copy Markdown
Member

@neiljohari, @janvorli, @mangod9, please resolve code review comments.

@JulieLeeMSFT
JulieLeeMSFT merged commit 5713889 into dotnet:release/10.0Apr 29, 2026
107 of 108 checks passed
@mangod9

Copy link
Copy Markdown
MemberAuthor

@BenV, this is now merged so should be included in June servicing.

@BenV

BenV commented Apr 29, 2026

Copy link
Copy Markdown

@BenV, this is now merged so should be included in June servicing.

Excellent, thanks again for all the help!

@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 30, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-GC-coreclrServicing-approvedApproved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@mangod9@BenV@JulieLeeMSFT@janvorli@rbhanda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Port 126929 to 10.0 - #126977

Merged
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0
Apr 29, 2026
Merged

Port 126929 to 10.0#126977
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0

Conversation

@mangod9

@mangod9mangod9 commented Apr 16, 2026

Copy link
Copy Markdown
Member

Fixes#126903

Customer Impact

  • Customer reported
  • Found internally

GC heap corruption when DOTNET_GCLargePages=1 is enabled on Linux (#126903). . Reproducible by calling GC.Collect(2, GCCollectionMode.Aggressive, true, true) with large pages enabled, but also occurs in normal production workloads without aggressive GC.

Regression

  • Yes
  • No

This is a pre-existing bug in the GC's large-page decommit logic. When GCLargePages is enabled, the GC skips OS-level
decommits but still updates bookkeeping as if the decommit succeeded. This causes regions to be reused without being zeroed, leading to heap corruption. The bug has existed since Regions was enabled.

Testing

The fix was validated by the customer against their production workload.

Risk

Low. The fix clears decommitted memory in the large-pages scenario to ensure regions are properly zeroed before reuse. This is a targeted change to the GC's decommit path that only affects GCLargePages=1 configurations. The larger fix#127290 is made in .NET 11

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @dotnet/gc
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports the fix for #126903 to the 10.0 branch by ensuring memory that is logically decommitted while GCLargePages is enabled is also cleared, preventing stale object references from being observed when the region is later reused.

Changes:

  • Extends gc_heap::virtual_decommit with an optional end_of_data parameter to allow clearing memory when OS decommit is a no-op under large pages.
  • In the aggressive-induced GC path, passes heap_segment_used(region) so the GC clears stale reference-containing bytes when shrinking heap_segment_committed.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
src/coreclr/gc/gcpriv.hUpdates the virtual_decommit declaration to accept an optional end_of_data pointer.
src/coreclr/gc/gc.cppImplements large-page clearing in virtual_decommit and wires end_of_data from distribute_free_regions() for aggressive-induced decommits.

Comment threadsrc/coreclr/gc/gc.cpp
@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

@mangod9

Copy link
Copy Markdown
MemberAuthor

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

Yes, so far so good on the production test, will keep you posted if we run into anything on that front.

@mangod9

Copy link
Copy Markdown
MemberAuthor

ok will work on getting this approved for back port. Thanks!

@mangod9
mangod9 requested a review from janvorliApril 28, 2026 14:30
@mangod9mangod9 added the Servicing-consider Issue for next servicing release review label Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added this to the 10.0.x milestone Apr 28, 2026
@rbhandarbhanda modified the milestones: 10.0.x, 10.0.9Apr 28, 2026
@JulieLeeMSFT

Copy link
Copy Markdown
Member

@neiljohari, @janvorli, @mangod9, please resolve code review comments.

@JulieLeeMSFT
JulieLeeMSFT merged commit 5713889 into dotnet:release/10.0Apr 29, 2026
107 of 108 checks passed
@mangod9

Copy link
Copy Markdown
MemberAuthor

@BenV, this is now merged so should be included in June servicing.

@BenV

BenV commented Apr 29, 2026

Copy link
Copy Markdown

@BenV, this is now merged so should be included in June servicing.

Excellent, thanks again for all the help!

@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 30, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-GC-coreclrServicing-approvedApproved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@mangod9@BenV@JulieLeeMSFT@janvorli@rbhanda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Port 126929 to 10.0 - #126977

Merged
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0
Apr 29, 2026
Merged

Port 126929 to 10.0#126977
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0

Conversation

@mangod9

@mangod9mangod9 commented Apr 16, 2026

Copy link
Copy Markdown
Member

Fixes#126903

Customer Impact

  • Customer reported
  • Found internally

GC heap corruption when DOTNET_GCLargePages=1 is enabled on Linux (#126903). . Reproducible by calling GC.Collect(2, GCCollectionMode.Aggressive, true, true) with large pages enabled, but also occurs in normal production workloads without aggressive GC.

Regression

  • Yes
  • No

This is a pre-existing bug in the GC's large-page decommit logic. When GCLargePages is enabled, the GC skips OS-level
decommits but still updates bookkeeping as if the decommit succeeded. This causes regions to be reused without being zeroed, leading to heap corruption. The bug has existed since Regions was enabled.

Testing

The fix was validated by the customer against their production workload.

Risk

Low. The fix clears decommitted memory in the large-pages scenario to ensure regions are properly zeroed before reuse. This is a targeted change to the GC's decommit path that only affects GCLargePages=1 configurations. The larger fix#127290 is made in .NET 11

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @dotnet/gc
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports the fix for #126903 to the 10.0 branch by ensuring memory that is logically decommitted while GCLargePages is enabled is also cleared, preventing stale object references from being observed when the region is later reused.

Changes:

  • Extends gc_heap::virtual_decommit with an optional end_of_data parameter to allow clearing memory when OS decommit is a no-op under large pages.
  • In the aggressive-induced GC path, passes heap_segment_used(region) so the GC clears stale reference-containing bytes when shrinking heap_segment_committed.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
src/coreclr/gc/gcpriv.hUpdates the virtual_decommit declaration to accept an optional end_of_data pointer.
src/coreclr/gc/gc.cppImplements large-page clearing in virtual_decommit and wires end_of_data from distribute_free_regions() for aggressive-induced decommits.

Comment threadsrc/coreclr/gc/gc.cpp
@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

@mangod9

Copy link
Copy Markdown
MemberAuthor

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

Yes, so far so good on the production test, will keep you posted if we run into anything on that front.

@mangod9

Copy link
Copy Markdown
MemberAuthor

ok will work on getting this approved for back port. Thanks!

@mangod9
mangod9 requested a review from janvorliApril 28, 2026 14:30
@mangod9mangod9 added the Servicing-consider Issue for next servicing release review label Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added this to the 10.0.x milestone Apr 28, 2026
@rbhandarbhanda modified the milestones: 10.0.x, 10.0.9Apr 28, 2026
@JulieLeeMSFT

Copy link
Copy Markdown
Member

@neiljohari, @janvorli, @mangod9, please resolve code review comments.

@JulieLeeMSFT
JulieLeeMSFT merged commit 5713889 into dotnet:release/10.0Apr 29, 2026
107 of 108 checks passed
@mangod9

Copy link
Copy Markdown
MemberAuthor

@BenV, this is now merged so should be included in June servicing.

@BenV

BenV commented Apr 29, 2026

Copy link
Copy Markdown

@BenV, this is now merged so should be included in June servicing.

Excellent, thanks again for all the help!

@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 30, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-GC-coreclrServicing-approvedApproved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@mangod9@BenV@JulieLeeMSFT@janvorli@rbhanda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Port 126929 to 10.0 - #126977

Merged
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0
Apr 29, 2026
Merged

Port 126929 to 10.0#126977
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0

Conversation

@mangod9

@mangod9mangod9 commented Apr 16, 2026

Copy link
Copy Markdown
Member

Fixes#126903

Customer Impact

  • Customer reported
  • Found internally

GC heap corruption when DOTNET_GCLargePages=1 is enabled on Linux (#126903). . Reproducible by calling GC.Collect(2, GCCollectionMode.Aggressive, true, true) with large pages enabled, but also occurs in normal production workloads without aggressive GC.

Regression

  • Yes
  • No

This is a pre-existing bug in the GC's large-page decommit logic. When GCLargePages is enabled, the GC skips OS-level
decommits but still updates bookkeeping as if the decommit succeeded. This causes regions to be reused without being zeroed, leading to heap corruption. The bug has existed since Regions was enabled.

Testing

The fix was validated by the customer against their production workload.

Risk

Low. The fix clears decommitted memory in the large-pages scenario to ensure regions are properly zeroed before reuse. This is a targeted change to the GC's decommit path that only affects GCLargePages=1 configurations. The larger fix#127290 is made in .NET 11

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @dotnet/gc
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports the fix for #126903 to the 10.0 branch by ensuring memory that is logically decommitted while GCLargePages is enabled is also cleared, preventing stale object references from being observed when the region is later reused.

Changes:

  • Extends gc_heap::virtual_decommit with an optional end_of_data parameter to allow clearing memory when OS decommit is a no-op under large pages.
  • In the aggressive-induced GC path, passes heap_segment_used(region) so the GC clears stale reference-containing bytes when shrinking heap_segment_committed.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
src/coreclr/gc/gcpriv.hUpdates the virtual_decommit declaration to accept an optional end_of_data pointer.
src/coreclr/gc/gc.cppImplements large-page clearing in virtual_decommit and wires end_of_data from distribute_free_regions() for aggressive-induced decommits.

Comment threadsrc/coreclr/gc/gc.cpp
@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

@mangod9

Copy link
Copy Markdown
MemberAuthor

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

Yes, so far so good on the production test, will keep you posted if we run into anything on that front.

@mangod9

Copy link
Copy Markdown
MemberAuthor

ok will work on getting this approved for back port. Thanks!

@mangod9
mangod9 requested a review from janvorliApril 28, 2026 14:30
@mangod9mangod9 added the Servicing-consider Issue for next servicing release review label Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added this to the 10.0.x milestone Apr 28, 2026
@rbhandarbhanda modified the milestones: 10.0.x, 10.0.9Apr 28, 2026
@JulieLeeMSFT

Copy link
Copy Markdown
Member

@neiljohari, @janvorli, @mangod9, please resolve code review comments.

@JulieLeeMSFT
JulieLeeMSFT merged commit 5713889 into dotnet:release/10.0Apr 29, 2026
107 of 108 checks passed
@mangod9

Copy link
Copy Markdown
MemberAuthor

@BenV, this is now merged so should be included in June servicing.

@BenV

BenV commented Apr 29, 2026

Copy link
Copy Markdown

@BenV, this is now merged so should be included in June servicing.

Excellent, thanks again for all the help!

@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 30, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-GC-coreclrServicing-approvedApproved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@mangod9@BenV@JulieLeeMSFT@janvorli@rbhanda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Port 126929 to 10.0 - #126977

Merged
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0
Apr 29, 2026
Merged

Port 126929 to 10.0#126977
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0

Conversation

@mangod9

@mangod9mangod9 commented Apr 16, 2026

Copy link
Copy Markdown
Member

Fixes#126903

Customer Impact

  • Customer reported
  • Found internally

GC heap corruption when DOTNET_GCLargePages=1 is enabled on Linux (#126903). . Reproducible by calling GC.Collect(2, GCCollectionMode.Aggressive, true, true) with large pages enabled, but also occurs in normal production workloads without aggressive GC.

Regression

  • Yes
  • No

This is a pre-existing bug in the GC's large-page decommit logic. When GCLargePages is enabled, the GC skips OS-level
decommits but still updates bookkeeping as if the decommit succeeded. This causes regions to be reused without being zeroed, leading to heap corruption. The bug has existed since Regions was enabled.

Testing

The fix was validated by the customer against their production workload.

Risk

Low. The fix clears decommitted memory in the large-pages scenario to ensure regions are properly zeroed before reuse. This is a targeted change to the GC's decommit path that only affects GCLargePages=1 configurations. The larger fix#127290 is made in .NET 11

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @dotnet/gc
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports the fix for #126903 to the 10.0 branch by ensuring memory that is logically decommitted while GCLargePages is enabled is also cleared, preventing stale object references from being observed when the region is later reused.

Changes:

  • Extends gc_heap::virtual_decommit with an optional end_of_data parameter to allow clearing memory when OS decommit is a no-op under large pages.
  • In the aggressive-induced GC path, passes heap_segment_used(region) so the GC clears stale reference-containing bytes when shrinking heap_segment_committed.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
src/coreclr/gc/gcpriv.hUpdates the virtual_decommit declaration to accept an optional end_of_data pointer.
src/coreclr/gc/gc.cppImplements large-page clearing in virtual_decommit and wires end_of_data from distribute_free_regions() for aggressive-induced decommits.

Comment threadsrc/coreclr/gc/gc.cpp
@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

@mangod9

Copy link
Copy Markdown
MemberAuthor

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

Yes, so far so good on the production test, will keep you posted if we run into anything on that front.

@mangod9

Copy link
Copy Markdown
MemberAuthor

ok will work on getting this approved for back port. Thanks!

@mangod9
mangod9 requested a review from janvorliApril 28, 2026 14:30
@mangod9mangod9 added the Servicing-consider Issue for next servicing release review label Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added this to the 10.0.x milestone Apr 28, 2026
@rbhandarbhanda modified the milestones: 10.0.x, 10.0.9Apr 28, 2026
@JulieLeeMSFT

Copy link
Copy Markdown
Member

@neiljohari, @janvorli, @mangod9, please resolve code review comments.

@JulieLeeMSFT
JulieLeeMSFT merged commit 5713889 into dotnet:release/10.0Apr 29, 2026
107 of 108 checks passed
@mangod9

Copy link
Copy Markdown
MemberAuthor

@BenV, this is now merged so should be included in June servicing.

@BenV

BenV commented Apr 29, 2026

Copy link
Copy Markdown

@BenV, this is now merged so should be included in June servicing.

Excellent, thanks again for all the help!

@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 30, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-GC-coreclrServicing-approvedApproved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@mangod9@BenV@JulieLeeMSFT@janvorli@rbhanda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Port 126929 to 10.0 - #126977

Merged
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0
Apr 29, 2026
Merged

Port 126929 to 10.0#126977
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0

Conversation

@mangod9

@mangod9mangod9 commented Apr 16, 2026

Copy link
Copy Markdown
Member

Fixes#126903

Customer Impact

  • Customer reported
  • Found internally

GC heap corruption when DOTNET_GCLargePages=1 is enabled on Linux (#126903). . Reproducible by calling GC.Collect(2, GCCollectionMode.Aggressive, true, true) with large pages enabled, but also occurs in normal production workloads without aggressive GC.

Regression

  • Yes
  • No

This is a pre-existing bug in the GC's large-page decommit logic. When GCLargePages is enabled, the GC skips OS-level
decommits but still updates bookkeeping as if the decommit succeeded. This causes regions to be reused without being zeroed, leading to heap corruption. The bug has existed since Regions was enabled.

Testing

The fix was validated by the customer against their production workload.

Risk

Low. The fix clears decommitted memory in the large-pages scenario to ensure regions are properly zeroed before reuse. This is a targeted change to the GC's decommit path that only affects GCLargePages=1 configurations. The larger fix#127290 is made in .NET 11

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @dotnet/gc
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports the fix for #126903 to the 10.0 branch by ensuring memory that is logically decommitted while GCLargePages is enabled is also cleared, preventing stale object references from being observed when the region is later reused.

Changes:

  • Extends gc_heap::virtual_decommit with an optional end_of_data parameter to allow clearing memory when OS decommit is a no-op under large pages.
  • In the aggressive-induced GC path, passes heap_segment_used(region) so the GC clears stale reference-containing bytes when shrinking heap_segment_committed.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
src/coreclr/gc/gcpriv.hUpdates the virtual_decommit declaration to accept an optional end_of_data pointer.
src/coreclr/gc/gc.cppImplements large-page clearing in virtual_decommit and wires end_of_data from distribute_free_regions() for aggressive-induced decommits.

Comment threadsrc/coreclr/gc/gc.cpp
@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

@mangod9

Copy link
Copy Markdown
MemberAuthor

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

Yes, so far so good on the production test, will keep you posted if we run into anything on that front.

@mangod9

Copy link
Copy Markdown
MemberAuthor

ok will work on getting this approved for back port. Thanks!

@mangod9
mangod9 requested a review from janvorliApril 28, 2026 14:30
@mangod9mangod9 added the Servicing-consider Issue for next servicing release review label Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added this to the 10.0.x milestone Apr 28, 2026
@rbhandarbhanda modified the milestones: 10.0.x, 10.0.9Apr 28, 2026
@JulieLeeMSFT

Copy link
Copy Markdown
Member

@neiljohari, @janvorli, @mangod9, please resolve code review comments.

@JulieLeeMSFT
JulieLeeMSFT merged commit 5713889 into dotnet:release/10.0Apr 29, 2026
107 of 108 checks passed
@mangod9

Copy link
Copy Markdown
MemberAuthor

@BenV, this is now merged so should be included in June servicing.

@BenV

BenV commented Apr 29, 2026

Copy link
Copy Markdown

@BenV, this is now merged so should be included in June servicing.

Excellent, thanks again for all the help!

@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 30, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-GC-coreclrServicing-approvedApproved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@mangod9@BenV@JulieLeeMSFT@janvorli@rbhanda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Port 126929 to 10.0 - #126977

Merged
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0
Apr 29, 2026
Merged

Port 126929 to 10.0#126977
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0

Conversation

@mangod9

@mangod9mangod9 commented Apr 16, 2026

Copy link
Copy Markdown
Member

Fixes#126903

Customer Impact

  • Customer reported
  • Found internally

GC heap corruption when DOTNET_GCLargePages=1 is enabled on Linux (#126903). . Reproducible by calling GC.Collect(2, GCCollectionMode.Aggressive, true, true) with large pages enabled, but also occurs in normal production workloads without aggressive GC.

Regression

  • Yes
  • No

This is a pre-existing bug in the GC's large-page decommit logic. When GCLargePages is enabled, the GC skips OS-level
decommits but still updates bookkeeping as if the decommit succeeded. This causes regions to be reused without being zeroed, leading to heap corruption. The bug has existed since Regions was enabled.

Testing

The fix was validated by the customer against their production workload.

Risk

Low. The fix clears decommitted memory in the large-pages scenario to ensure regions are properly zeroed before reuse. This is a targeted change to the GC's decommit path that only affects GCLargePages=1 configurations. The larger fix#127290 is made in .NET 11

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @dotnet/gc
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports the fix for #126903 to the 10.0 branch by ensuring memory that is logically decommitted while GCLargePages is enabled is also cleared, preventing stale object references from being observed when the region is later reused.

Changes:

  • Extends gc_heap::virtual_decommit with an optional end_of_data parameter to allow clearing memory when OS decommit is a no-op under large pages.
  • In the aggressive-induced GC path, passes heap_segment_used(region) so the GC clears stale reference-containing bytes when shrinking heap_segment_committed.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
src/coreclr/gc/gcpriv.hUpdates the virtual_decommit declaration to accept an optional end_of_data pointer.
src/coreclr/gc/gc.cppImplements large-page clearing in virtual_decommit and wires end_of_data from distribute_free_regions() for aggressive-induced decommits.

Comment threadsrc/coreclr/gc/gc.cpp
@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

@mangod9

Copy link
Copy Markdown
MemberAuthor

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

Yes, so far so good on the production test, will keep you posted if we run into anything on that front.

@mangod9

Copy link
Copy Markdown
MemberAuthor

ok will work on getting this approved for back port. Thanks!

@mangod9
mangod9 requested a review from janvorliApril 28, 2026 14:30
@mangod9mangod9 added the Servicing-consider Issue for next servicing release review label Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added this to the 10.0.x milestone Apr 28, 2026
@rbhandarbhanda modified the milestones: 10.0.x, 10.0.9Apr 28, 2026
@JulieLeeMSFT

Copy link
Copy Markdown
Member

@neiljohari, @janvorli, @mangod9, please resolve code review comments.

@JulieLeeMSFT
JulieLeeMSFT merged commit 5713889 into dotnet:release/10.0Apr 29, 2026
107 of 108 checks passed
@mangod9

Copy link
Copy Markdown
MemberAuthor

@BenV, this is now merged so should be included in June servicing.

@BenV

BenV commented Apr 29, 2026

Copy link
Copy Markdown

@BenV, this is now merged so should be included in June servicing.

Excellent, thanks again for all the help!

@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 30, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-GC-coreclrServicing-approvedApproved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@mangod9@BenV@JulieLeeMSFT@janvorli@rbhanda
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Port 126929 to 10.0 - #126977

Merged
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0
Apr 29, 2026
Merged

Port 126929 to 10.0#126977
JulieLeeMSFT merged 2 commits into
dotnet:release/10.0from
mangod9:fix/gc-largepages-10.0

Conversation

@mangod9

@mangod9mangod9 commented Apr 16, 2026

Copy link
Copy Markdown
Member

Fixes#126903

Customer Impact

  • Customer reported
  • Found internally

GC heap corruption when DOTNET_GCLargePages=1 is enabled on Linux (#126903). . Reproducible by calling GC.Collect(2, GCCollectionMode.Aggressive, true, true) with large pages enabled, but also occurs in normal production workloads without aggressive GC.

Regression

  • Yes
  • No

This is a pre-existing bug in the GC's large-page decommit logic. When GCLargePages is enabled, the GC skips OS-level
decommits but still updates bookkeeping as if the decommit succeeded. This causes regions to be reused without being zeroed, leading to heap corruption. The bug has existed since Regions was enabled.

Testing

The fix was validated by the customer against their production workload.

Risk

Low. The fix clears decommitted memory in the large-pages scenario to ensure regions are properly zeroed before reuse. This is a targeted change to the GC's decommit path that only affects GCLargePages=1 configurations. The larger fix#127290 is made in .NET 11

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @JulieLeeMSFT, @dotnet/gc
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ports the fix for #126903 to the 10.0 branch by ensuring memory that is logically decommitted while GCLargePages is enabled is also cleared, preventing stale object references from being observed when the region is later reused.

Changes:

  • Extends gc_heap::virtual_decommit with an optional end_of_data parameter to allow clearing memory when OS decommit is a no-op under large pages.
  • In the aggressive-induced GC path, passes heap_segment_used(region) so the GC clears stale reference-containing bytes when shrinking heap_segment_committed.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

FileDescription
src/coreclr/gc/gcpriv.hUpdates the virtual_decommit declaration to accept an optional end_of_data pointer.
src/coreclr/gc/gc.cppImplements large-page clearing in virtual_decommit and wires end_of_data from distribute_free_regions() for aggressive-induced decommits.

Comment threadsrc/coreclr/gc/gc.cpp
@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

@mangod9

Copy link
Copy Markdown
MemberAuthor

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

@BenV

BenV commented Apr 28, 2026

Copy link
Copy Markdown

@mangod9 Thanks again for helping out with this - is this still on track to get merged for the June release? Would it also make sense to backport #127290?

So just checking that your prod test went well too? Current thinking is to back port only the targeted fix.

Yes, so far so good on the production test, will keep you posted if we run into anything on that front.

@mangod9

Copy link
Copy Markdown
MemberAuthor

ok will work on getting this approved for back port. Thanks!

@mangod9
mangod9 requested a review from janvorliApril 28, 2026 14:30
@mangod9mangod9 added the Servicing-consider Issue for next servicing release review label Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Apr 28, 2026
@JulieLeeMSFTJulieLeeMSFT added this to the 10.0.x milestone Apr 28, 2026
@rbhandarbhanda modified the milestones: 10.0.x, 10.0.9Apr 28, 2026
@JulieLeeMSFT

Copy link
Copy Markdown
Member

@neiljohari, @janvorli, @mangod9, please resolve code review comments.

@JulieLeeMSFT
JulieLeeMSFT merged commit 5713889 into dotnet:release/10.0Apr 29, 2026
107 of 108 checks passed
@mangod9

Copy link
Copy Markdown
MemberAuthor

@BenV, this is now merged so should be included in June servicing.

@BenV

BenV commented Apr 29, 2026

Copy link
Copy Markdown

@BenV, this is now merged so should be included in June servicing.

Excellent, thanks again for all the help!

@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 30, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-GC-coreclrServicing-approvedApproved for servicing release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@mangod9@BenV@JulieLeeMSFT@janvorli@rbhanda