diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs index 1e712b542..ef027667e 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferModifiedRangeList.cs @@ -289,6 +289,7 @@ namespace Ryujinx.Graphics.Gpu.Memory { RangeItem[] overlaps = new RangeItem[1]; + // We use the non-span method here because keeping the lock will cause a deadlock. Lock.EnterReadLock(); OverlapResult result = FindOverlapsNonOverlapping(address, size, ref overlaps); Lock.ExitReadLock(); @@ -409,6 +410,7 @@ namespace Ryujinx.Graphics.Gpu.Memory } else { + // We use the non-span method here because the array is partially modified by the code, which would invalidate a span. rangeCount = FindOverlapsNonOverlapping(address, size, ref overlaps).Count; } Lock.ExitReadLock(); diff --git a/src/Ryujinx.Memory/Tracking/MemoryTracking.cs b/src/Ryujinx.Memory/Tracking/MemoryTracking.cs index bc69aea3d..7aecd7f4d 100644 --- a/src/Ryujinx.Memory/Tracking/MemoryTracking.cs +++ b/src/Ryujinx.Memory/Tracking/MemoryTracking.cs @@ -299,6 +299,7 @@ namespace Ryujinx.Memory.Tracking NonOverlappingRangeList regions = guest ? _guestVirtualRegions : _virtualRegions; ref RangeItem[] overlaps = ref ThreadStaticArray>.Get(); + // We use the non-span method here because keeping the lock will cause a deadlock. regions.Lock.EnterReadLock(); OverlapResult result = regions.FindOverlapsNonOverlapping(address, size, ref overlaps); regions.Lock.ExitReadLock();