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)

This commit is contained in:
jhorv 2024-06-16 16:47:47 -04:00 committed by GitHub
parent 3193ef1083
commit 311ca3c3f1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 4 additions and 4 deletions

View File

@ -124,7 +124,7 @@ namespace Ryujinx.Common.Memory
if (array is not null) if (array is not null)
{ {
ArrayPool<T>.Shared.Return(array); ArrayPool<T>.Shared.Return(array, RuntimeHelpers.IsReferenceOrContainsReferences<T>());
} }
} }

View File

@ -108,7 +108,7 @@ namespace Ryujinx.Common.Memory
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Dispose() public void Dispose()
{ {
ArrayPool<T>.Shared.Return(_array); ArrayPool<T>.Shared.Return(_array, RuntimeHelpers.IsReferenceOrContainsReferences<T>());
} }
} }
} }

View File

@ -616,7 +616,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
} }
} }
ArrayPool<KSynchronizationObject>.Shared.Return(syncObjsArray); ArrayPool<KSynchronizationObject>.Shared.Return(syncObjsArray, true);
return result; return result;
} }

View File

@ -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(); _context.CriticalSection.Leave();