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:
parent
3193ef1083
commit
311ca3c3f1
4 changed files with 4 additions and 4 deletions
|
@ -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>());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -616,7 +616,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
|
|||
}
|
||||
}
|
||||
|
||||
ArrayPool<KSynchronizationObject>.Shared.Return(syncObjsArray);
|
||||
ArrayPool<KSynchronizationObject>.Shared.Return(syncObjsArray, true);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Reference in a new issue