|
@@ -293,18 +293,14 @@ namespace Ryujinx.Memory.WindowsShared
|
|
|
|
|
|
|
|
if (IsMapped(overlap.Value))
|
|
if (IsMapped(overlap.Value))
|
|
|
{
|
|
{
|
|
|
- ulong overlapStart = overlap.Start;
|
|
|
|
|
- ulong overlapEnd = overlap.End;
|
|
|
|
|
- ulong overlapValue = overlap.Value;
|
|
|
|
|
-
|
|
|
|
|
lock (_mappings)
|
|
lock (_mappings)
|
|
|
{
|
|
{
|
|
|
_mappings.Remove(overlap);
|
|
_mappings.Remove(overlap);
|
|
|
- _mappings.Add(new RangeNode<ulong>(overlapStart, overlapEnd, ulong.MaxValue));
|
|
|
|
|
|
|
+ _mappings.Add(new RangeNode<ulong>(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)
|
|
if (overlapStartsBefore || overlapEndsAfter)
|
|
|
{
|
|
{
|
|
@@ -321,25 +317,25 @@ namespace Ryujinx.Memory.WindowsShared
|
|
|
{
|
|
{
|
|
|
partialUnmapState.PartialUnmapsCount++;
|
|
partialUnmapState.PartialUnmapsCount++;
|
|
|
|
|
|
|
|
- if (!WindowsApi.UnmapViewOfFile2(WindowsApi.CurrentProcessHandle, (IntPtr)overlapStart, 2))
|
|
|
|
|
|
|
+ if (!WindowsApi.UnmapViewOfFile2(WindowsApi.CurrentProcessHandle, (IntPtr)overlap.Start, 2))
|
|
|
{
|
|
{
|
|
|
throw new WindowsApiException("UnmapViewOfFile2");
|
|
throw new WindowsApiException("UnmapViewOfFile2");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (overlapStartsBefore)
|
|
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)
|
|
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);
|
|
MapViewInternal(sharedMemory, remapBackingOffset, (IntPtr)remapAddress, (IntPtr)remapSize);
|
|
|
RestoreRangeProtection(remapAddress, remapSize);
|
|
RestoreRangeProtection(remapAddress, remapSize);
|
|
@@ -350,7 +346,7 @@ namespace Ryujinx.Memory.WindowsShared
|
|
|
partialUnmapLock.DowngradeFromWriterLock();
|
|
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");
|
|
throw new WindowsApiException("UnmapViewOfFile2");
|
|
|
}
|
|
}
|