Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<!-- Methods are used to register and unregister frozen segments. They are private and experimental. -->
<method name="_RegisterFrozenSegment" />
<method name="_UnregisterFrozenSegment" />
<method name="_RefreshMemoryLimit" />
</type>
<!-- Accessed via native code. -->
<type fullname="System.Runtime.InteropServices.ComTypes.IEnumerable" />
Expand Down
39 changes: 39 additions & 0 deletions src/coreclr/System.Private.CoreLib/src/System/GC.CoreCLR.cs
Original file line number Diff line number Diff line change
Expand Up @@ -789,5 +789,44 @@ internal enum GCConfigurationType

[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_EnumerateConfigurationValues")]
internal static unsafe partial void _EnumerateConfigurationValues(void* configurationDictionary, delegate* unmanaged<void*, void*, void*, GCConfigurationType, long, void> callback);

private static int _RefreshMemoryLimit()
{
ulong heapHardLimit = (AppContext.GetData("GCHeapHardLimit") as ulong?) ?? ulong.MaxValue;
ulong heapHardLimitPercent = (AppContext.GetData("GCHeapHardLimitPercent") as ulong?) ?? ulong.MaxValue;
ulong heapHardLimitSOH = (AppContext.GetData("GCHeapHardLimitSOH") as ulong?) ?? ulong.MaxValue;
ulong heapHardLimitLOH = (AppContext.GetData("GCHeapHardLimitLOH") as ulong?) ?? ulong.MaxValue;
ulong heapHardLimitPOH = (AppContext.GetData("GCHeapHardLimitPOH") as ulong?) ?? ulong.MaxValue;
ulong heapHardLimitSOHPercent = (AppContext.GetData("GCHeapHardLimitSOHPercent") as ulong?) ?? ulong.MaxValue;
ulong heapHardLimitLOHPercent = (AppContext.GetData("GCHeapHardLimitLOHPercent") as ulong?) ?? ulong.MaxValue;
ulong heapHardLimitPOHPercent = (AppContext.GetData("GCHeapHardLimitPOHPercent") as ulong?) ?? ulong.MaxValue;
GCHeapHardLimitInfo heapHardLimitInfo = new GCHeapHardLimitInfo
{
HeapHardLimit = heapHardLimit,
HeapHardLimitPercent = heapHardLimitPercent,
HeapHardLimitSOH = heapHardLimitSOH,
HeapHardLimitLOH = heapHardLimitLOH,
HeapHardLimitPOH = heapHardLimitPOH,
HeapHardLimitSOHPercent = heapHardLimitSOHPercent,
HeapHardLimitLOHPercent = heapHardLimitLOHPercent,
HeapHardLimitPOHPercent = heapHardLimitPOHPercent,
};
return RefreshMemoryLimit(heapHardLimitInfo);
}

[LibraryImport(RuntimeHelpers.QCall, EntryPoint = "GCInterface_RefreshMemoryLimit")]
internal static partial int RefreshMemoryLimit(GCHeapHardLimitInfo heapHardLimitInfo);

internal struct GCHeapHardLimitInfo
{
internal ulong HeapHardLimit;
internal ulong HeapHardLimitPercent;
internal ulong HeapHardLimitSOH;
internal ulong HeapHardLimitLOH;
internal ulong HeapHardLimitPOH;
internal ulong HeapHardLimitSOHPercent;
internal ulong HeapHardLimitLOHPercent;
internal ulong HeapHardLimitPOHPercent;
}
}
}
Loading