aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjhorv <38920027+jhorv@users.noreply.github.com>2024-06-16 16:47:47 -0400
committerGitHub <noreply@github.com>2024-06-16 17:47:47 -0300
commit311ca3c3f1719c0effeedfb8cf90d9f2675ef8a5 (patch)
tree769ffd984001a7b35eea5d64af53873b89ddc05e
parent3193ef10833bc0d27e2701c7759ab02674d672d3 (diff)
fix: for pooled memory used for reference types, clear it on return to the pool so that it doesn't prevent GC of the instances it contained (#6937)1.1.1334
-rw-r--r--src/Ryujinx.Common/Memory/MemoryOwner.cs2
-rw-r--r--src/Ryujinx.Common/Memory/SpanOwner.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs2
-rw-r--r--src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs2
4 files changed, 4 insertions, 4 deletions
diff --git a/src/Ryujinx.Common/Memory/MemoryOwner.cs b/src/Ryujinx.Common/Memory/MemoryOwner.cs
index 5e567ab8..b7fe1db7 100644
--- a/src/Ryujinx.Common/Memory/MemoryOwner.cs
+++ b/src/Ryujinx.Common/Memory/MemoryOwner.cs
@@ -124,7 +124,7 @@ namespace Ryujinx.Common.Memory
if (array is not null)
{
- ArrayPool<T>.Shared.Return(array);
+ ArrayPool<T>.Shared.Return(array, RuntimeHelpers.IsReferenceOrContainsReferences<T>());
}
}
diff --git a/src/Ryujinx.Common/Memory/SpanOwner.cs b/src/Ryujinx.Common/Memory/SpanOwner.cs
index a4b4adf3..acb20bca 100644
--- a/src/Ryujinx.Common/Memory/SpanOwner.cs
+++ b/src/Ryujinx.Common/Memory/SpanOwner.cs
@@ -108,7 +108,7 @@ namespace Ryujinx.Common.Memory
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Dispose()
{
- ArrayPool<T>.Shared.Return(_array);
+ ArrayPool<T>.Shared.Return(_array, RuntimeHelpers.IsReferenceOrContainsReferences<T>());
}
}
}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs
index 6595ecef..91c6bded 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/SupervisorCall/Syscall.cs
@@ -616,7 +616,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
}
- ArrayPool<KSynchronizationObject>.Shared.Return(syncObjsArray);
+ ArrayPool<KSynchronizationObject>.Shared.Return(syncObjsArray, true);
return result;
}
diff --git a/src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs b/src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs
index b1af06b0..21c2730b 100644
--- a/src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs
+++ b/src/Ryujinx.HLE/HOS/Kernel/Threading/KSynchronization.cs
@@ -104,7 +104,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
}
}
- ArrayPool<LinkedListNode<KThread>>.Shared.Return(syncNodesArray);
+ ArrayPool<LinkedListNode<KThread>>.Shared.Return(syncNodesArray, true);
}
_context.CriticalSection.Leave();