diff --git a/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs b/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs index f1752229..b08a91e0 100644 --- a/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs +++ b/Ryujinx.Memory/WindowsShared/PlaceholderManager.cs @@ -293,18 +293,14 @@ namespace Ryujinx.Memory.WindowsShared if (IsMapped(overlap.Value)) { - ulong overlapStart = overlap.Start; - ulong overlapEnd = overlap.End; - ulong overlapValue = overlap.Value; - lock (_mappings) { _mappings.Remove(overlap); - _mappings.Add(new RangeNode(overlapStart, overlapEnd, ulong.MaxValue)); + _mappings.Add(new RangeNode(overlap.Start, overlap.End, ulong.MaxValue)); } - bool overlapStartsBefore = overlapStart < startAddress; - bool overlapEndsAfter = overlapEnd > endAddress; + bool overlapStartsBefore = overlap.Start < startAddress; + bool overlapEndsAfter = overlap.End > endAddress; if (overlapStartsBefore || overlapEndsAfter) { @@ -321,25 +317,25 @@ namespace Ryujinx.Memory.WindowsShared { partialUnmapState.PartialUnmapsCount++; - if (!WindowsApi.UnmapViewOfFile2(WindowsApi.CurrentProcessHandle, (IntPtr)overlapStart, 2)) + if (!WindowsApi.UnmapViewOfFile2(WindowsApi.CurrentProcessHandle, (IntPtr)overlap.Start, 2)) { throw new WindowsApiException("UnmapViewOfFile2"); } if (overlapStartsBefore) { - ulong remapSize = startAddress - overlapStart; + ulong remapSize = startAddress - overlap.Start; - MapViewInternal(sharedMemory, overlapValue, (IntPtr)overlapStart, (IntPtr)remapSize); - RestoreRangeProtection(overlapStart, remapSize); + MapViewInternal(sharedMemory, overlap.Value, (IntPtr)overlap.Start, (IntPtr)remapSize); + RestoreRangeProtection(overlap.Start, remapSize); } if (overlapEndsAfter) { - ulong overlappedSize = endAddress - overlapStart; - ulong remapBackingOffset = overlapValue + overlappedSize; - ulong remapAddress = overlapStart + overlappedSize; - ulong remapSize = overlapEnd - endAddress; + ulong overlappedSize = endAddress - overlap.Start; + ulong remapBackingOffset = overlap.Value + overlappedSize; + ulong remapAddress = overlap.Start + overlappedSize; + ulong remapSize = overlap.End - endAddress; MapViewInternal(sharedMemory, remapBackingOffset, (IntPtr)remapAddress, (IntPtr)remapSize); RestoreRangeProtection(remapAddress, remapSize); @@ -350,7 +346,7 @@ namespace Ryujinx.Memory.WindowsShared partialUnmapLock.DowngradeFromWriterLock(); } } - else if (!WindowsApi.UnmapViewOfFile2(WindowsApi.CurrentProcessHandle, (IntPtr)overlapStart, 2)) + else if (!WindowsApi.UnmapViewOfFile2(WindowsApi.CurrentProcessHandle, (IntPtr)overlap.Start, 2)) { throw new WindowsApiException("UnmapViewOfFile2"); }