aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Memory/MemoryManagement.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2022-05-05 14:58:59 -0300
committerGitHub <noreply@github.com>2022-05-05 14:58:59 -0300
commit54deded929203a64555d97424d5bb4b884fff69f (patch)
tree2ae40f9b49e92db844145ddc61444aac2db6381e /Ryujinx.Memory/MemoryManagement.cs
parent39bdf6d41e6cad370f7a10b766d91418c194ead8 (diff)
Fix shared memory leak on Windows (#3319)1.1.116
* Fix shared memory leak on Windows * Fix memory leak caused by RO session disposal not decrementing the memory manager ref count * Fix UnmapViewInternal deadlock * Was not supposed to add those back
Diffstat (limited to 'Ryujinx.Memory/MemoryManagement.cs')
-rw-r--r--Ryujinx.Memory/MemoryManagement.cs44
1 files changed, 14 insertions, 30 deletions
diff --git a/Ryujinx.Memory/MemoryManagement.cs b/Ryujinx.Memory/MemoryManagement.cs
index 81262152..3b8a9664 100644
--- a/Ryujinx.Memory/MemoryManagement.cs
+++ b/Ryujinx.Memory/MemoryManagement.cs
@@ -8,9 +8,7 @@ namespace Ryujinx.Memory
{
if (OperatingSystem.IsWindows())
{
- IntPtr sizeNint = new IntPtr((long)size);
-
- return MemoryManagementWindows.Allocate(sizeNint);
+ return MemoryManagementWindows.Allocate((IntPtr)size);
}
else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
{
@@ -22,13 +20,11 @@ namespace Ryujinx.Memory
}
}
- public static IntPtr Reserve(ulong size, bool viewCompatible)
+ public static IntPtr Reserve(ulong size, bool viewCompatible, bool force4KBMap)
{
if (OperatingSystem.IsWindows())
{
- IntPtr sizeNint = new IntPtr((long)size);
-
- return MemoryManagementWindows.Reserve(sizeNint, viewCompatible);
+ return MemoryManagementWindows.Reserve((IntPtr)size, viewCompatible, force4KBMap);
}
else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
{
@@ -44,9 +40,7 @@ namespace Ryujinx.Memory
{
if (OperatingSystem.IsWindows())
{
- IntPtr sizeNint = new IntPtr((long)size);
-
- return MemoryManagementWindows.Commit(address, sizeNint);
+ return MemoryManagementWindows.Commit(address, (IntPtr)size);
}
else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
{
@@ -62,9 +56,7 @@ namespace Ryujinx.Memory
{
if (OperatingSystem.IsWindows())
{
- IntPtr sizeNint = new IntPtr((long)size);
-
- return MemoryManagementWindows.Decommit(address, sizeNint);
+ return MemoryManagementWindows.Decommit(address, (IntPtr)size);
}
else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
{
@@ -80,15 +72,13 @@ namespace Ryujinx.Memory
{
if (OperatingSystem.IsWindows())
{
- IntPtr sizeNint = new IntPtr((long)size);
-
if (force4KBMap)
{
- MemoryManagementWindows.MapView4KB(sharedMemory, srcOffset, address, sizeNint);
+ MemoryManagementWindows.MapView4KB(sharedMemory, srcOffset, address, (IntPtr)size);
}
else
{
- MemoryManagementWindows.MapView(sharedMemory, srcOffset, address, sizeNint);
+ MemoryManagementWindows.MapView(sharedMemory, srcOffset, address, (IntPtr)size);
}
}
else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
@@ -105,15 +95,13 @@ namespace Ryujinx.Memory
{
if (OperatingSystem.IsWindows())
{
- IntPtr sizeNint = new IntPtr((long)size);
-
if (force4KBMap)
{
- MemoryManagementWindows.UnmapView4KB(address, sizeNint);
+ MemoryManagementWindows.UnmapView4KB(address, (IntPtr)size);
}
else
{
- MemoryManagementWindows.UnmapView(sharedMemory, address, sizeNint);
+ MemoryManagementWindows.UnmapView(sharedMemory, address, (IntPtr)size);
}
}
else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
@@ -132,15 +120,13 @@ namespace Ryujinx.Memory
if (OperatingSystem.IsWindows())
{
- IntPtr sizeNint = new IntPtr((long)size);
-
if (forView && force4KBMap)
{
- result = MemoryManagementWindows.Reprotect4KB(address, sizeNint, permission, forView);
+ result = MemoryManagementWindows.Reprotect4KB(address, (IntPtr)size, permission, forView);
}
else
{
- result = MemoryManagementWindows.Reprotect(address, sizeNint, permission, forView);
+ result = MemoryManagementWindows.Reprotect(address, (IntPtr)size, permission, forView);
}
}
else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
@@ -158,11 +144,11 @@ namespace Ryujinx.Memory
}
}
- public static bool Free(IntPtr address)
+ public static bool Free(IntPtr address, ulong size, bool force4KBMap)
{
if (OperatingSystem.IsWindows())
{
- return MemoryManagementWindows.Free(address);
+ return MemoryManagementWindows.Free(address, (IntPtr)size, force4KBMap);
}
else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
{
@@ -178,9 +164,7 @@ namespace Ryujinx.Memory
{
if (OperatingSystem.IsWindows())
{
- IntPtr sizeNint = new IntPtr((long)size);
-
- return MemoryManagementWindows.CreateSharedMemory(sizeNint, reserve);
+ return MemoryManagementWindows.CreateSharedMemory((IntPtr)size, reserve);
}
else if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
{