From 7ac172ad515719fb95b42f697f07b5b6290f172a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 21 Jun 2026 13:43:18 +0000 Subject: [PATCH 1/3] Initial plan From 0189a88f3eefb035afffdcbd703dbbf5b222ac59 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 21 Jun 2026 14:10:31 +0000 Subject: [PATCH 2/3] Fix s_globalHostServices fixed-address storage Co-authored-by: jkotas <6668460+jkotas@users.noreply.github.com> --- .../Runtime/InteropServices/ReferenceTrackerHost.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs index a2e6f9c42d50c1..a1f1d04d536586 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs @@ -12,7 +12,8 @@ namespace System.Runtime.InteropServices internal static class ReferenceTrackerHost { [FixedAddressValueType] - private static readonly unsafe IntPtr s_globalHostServices = (IntPtr)Unsafe.AsPointer(in HostServices.Vftbl); + private static readonly unsafe ReferenceTrackerHostObject s_globalHostServices = + new((IReferenceTrackerHostVftbl*)Unsafe.AsPointer(in HostServices.Vftbl)); // Called when an IReferenceTracker instance is found. public static unsafe void SetReferenceTrackerHost(IntPtr trackerManager) @@ -162,6 +163,16 @@ private unsafe struct IReferenceTrackerHostVftbl public delegate* unmanaged[MemberFunction] RemoveMemoryPressure; } + private readonly unsafe struct ReferenceTrackerHostObject + { + public readonly IReferenceTrackerHostVftbl* Vftbl; + + public ReferenceTrackerHostObject(IReferenceTrackerHostVftbl* vftbl) + { + Vftbl = vftbl; + } + } + private static class HostServices { [FixedAddressValueType] From 721b060967ed6ec42c424839dad10e423b247c9c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 21 Jun 2026 15:18:28 +0000 Subject: [PATCH 3/3] Address ReferenceTrackerHost review feedback Co-authored-by: jkotas <6668460+jkotas@users.noreply.github.com> --- .../InteropServices/ReferenceTrackerHost.cs | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs index a1f1d04d536586..a3c9561385ea85 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/ReferenceTrackerHost.cs @@ -9,16 +9,23 @@ namespace System.Runtime.InteropServices { - internal static class ReferenceTrackerHost + internal readonly unsafe struct ReferenceTrackerHost { [FixedAddressValueType] - private static readonly unsafe ReferenceTrackerHostObject s_globalHostServices = + private static readonly ReferenceTrackerHost s_instance = new((IReferenceTrackerHostVftbl*)Unsafe.AsPointer(in HostServices.Vftbl)); + private readonly IReferenceTrackerHostVftbl* _vftbl; + + private ReferenceTrackerHost(IReferenceTrackerHostVftbl* vftbl) + { + _vftbl = vftbl; + } + // Called when an IReferenceTracker instance is found. - public static unsafe void SetReferenceTrackerHost(IntPtr trackerManager) + public static void SetReferenceTrackerHost(IntPtr trackerManager) { - IReferenceTrackerManager.SetReferenceTrackerHost(trackerManager, (IntPtr)Unsafe.AsPointer(in s_globalHostServices)); + IReferenceTrackerManager.SetReferenceTrackerHost(trackerManager, (IntPtr)Unsafe.AsPointer(in s_instance)); } #pragma warning disable IDE0060, CS3016 @@ -163,16 +170,6 @@ private unsafe struct IReferenceTrackerHostVftbl public delegate* unmanaged[MemberFunction] RemoveMemoryPressure; } - private readonly unsafe struct ReferenceTrackerHostObject - { - public readonly IReferenceTrackerHostVftbl* Vftbl; - - public ReferenceTrackerHostObject(IReferenceTrackerHostVftbl* vftbl) - { - Vftbl = vftbl; - } - } - private static class HostServices { [FixedAddressValueType]