aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
diff options
context:
space:
mode:
authorgdk <gab.dark.100@gmail.com>2022-07-15 17:05:14 -0300
committerMary-nyan <thog@protonmail.com>2022-09-10 16:23:49 +0200
commit65f2a82b9745548748aa1d68547aff7a2cac574a (patch)
tree0c6076624f005b7658b151f85fcaf046d0cfdb74 /Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
parent93dd6d525a8c4072ba704e0bb126a980ef4b479a (diff)
Optimize PlaceholderManager.UnreserveRange
Diffstat (limited to 'Ryujinx.Memory/WindowsShared/PlaceholderManager.cs')
-rw-r--r--Ryujinx.Memory/WindowsShared/PlaceholderManager.cs20
1 files changed, 10 insertions, 10 deletions
diff --git a/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs b/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
index b08a91e0..1722d528 100644
--- a/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
+++ b/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs
@@ -86,26 +86,26 @@ namespace Ryujinx.Memory.WindowsShared
{
ulong endAddress = address + size;
- var overlaps = new RangeNode<ulong>[InitialOverlapsSize];
- int count;
-
lock (_mappings)
{
- count = _mappings.GetNodes(address, endAddress, ref overlaps);
+ RangeNode<ulong> node = _mappings.GetNode(new RangeNode<ulong>(address, address + 1UL, default));
- for (int index = 0; index < count; index++)
+ for (; node != null; node = node.Successor)
{
- var overlap = overlaps[index];
-
- if (IsMapped(overlap.Value))
+ if (IsMapped(node.Value))
{
- if (!WindowsApi.UnmapViewOfFile2(WindowsApi.CurrentProcessHandle, (IntPtr)overlap.Start, 2))
+ if (!WindowsApi.UnmapViewOfFile2(WindowsApi.CurrentProcessHandle, (IntPtr)node.Start, 2))
{
throw new WindowsApiException("UnmapViewOfFile2");
}
}
- _mappings.Remove(overlap);
+ _mappings.Remove(node);
+
+ if (node.End >= endAddress)
+ {
+ break;
+ }
}
}