1
0
forked from MeloNX/MeloNX

Fix potential race + wrong check for partition not being found

This commit is contained in:
Gabriel A 2024-01-04 20:48:53 -03:00
parent df92f2052a
commit 942efbb6d6

View File

@ -32,6 +32,8 @@ namespace Ryujinx.Cpu.Jit
ulong endVa = va + size;
while (va < endVa)
{
lock (_partitions)
{
int partitionIndex = FindPartitionIndex(va);
AddressSpacePartition partition = _partitions[partitionIndex];
@ -48,6 +50,7 @@ namespace Ryujinx.Cpu.Jit
InsertBridgeIfNeeded(partitionIndex);
}
}
}
public void Unmap(ulong va, ulong size)
{
@ -55,16 +58,20 @@ namespace Ryujinx.Cpu.Jit
while (va < endVa)
{
int partitionIndex = FindPartitionIndex(va);
AddressSpacePartition partition = _partitions[partitionIndex];
AddressSpacePartition partition;
if (partition == null)
lock (_partitions)
{
int partitionIndex = FindPartitionIndex(va);
if (partitionIndex < 0)
{
va += PartitionSize - (va & (PartitionSize - 1));
continue;
}
partition = _partitions[partitionIndex];
(ulong clampedVa, ulong clampedEndVa) = ClampRange(partition, va, endVa);
partition.Unmap(clampedVa, clampedEndVa - clampedVa);
@ -74,8 +81,6 @@ namespace Ryujinx.Cpu.Jit
RemoveBridgeIfNeeded(partitionIndex);
if (partition.IsEmpty())
{
lock (_partitions)
{
_partitions.Remove(partition);
partition.Dispose();