mirror of
https://git.743378673.xyz/MeloNX/MeloNX.git
synced 2025-06-28 19:36:24 +02:00
Fix potential race + wrong check for partition not being found
This commit is contained in:
parent
afcfba498c
commit
c47ce6f697
1 changed files with 26 additions and 21 deletions
|
@ -32,6 +32,8 @@ namespace Ryujinx.Cpu.Jit
|
||||||
ulong endVa = va + size;
|
ulong endVa = va + size;
|
||||||
|
|
||||||
while (va < endVa)
|
while (va < endVa)
|
||||||
|
{
|
||||||
|
lock (_partitions)
|
||||||
{
|
{
|
||||||
int partitionIndex = FindPartitionIndex(va);
|
int partitionIndex = FindPartitionIndex(va);
|
||||||
AddressSpacePartition partition = _partitions[partitionIndex];
|
AddressSpacePartition partition = _partitions[partitionIndex];
|
||||||
|
@ -48,6 +50,7 @@ namespace Ryujinx.Cpu.Jit
|
||||||
InsertBridgeIfNeeded(partitionIndex);
|
InsertBridgeIfNeeded(partitionIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Unmap(ulong va, ulong size)
|
public void Unmap(ulong va, ulong size)
|
||||||
{
|
{
|
||||||
|
@ -55,16 +58,20 @@ namespace Ryujinx.Cpu.Jit
|
||||||
|
|
||||||
while (va < endVa)
|
while (va < endVa)
|
||||||
{
|
{
|
||||||
int partitionIndex = FindPartitionIndex(va);
|
AddressSpacePartition partition;
|
||||||
AddressSpacePartition partition = _partitions[partitionIndex];
|
|
||||||
|
|
||||||
if (partition == null)
|
lock (_partitions)
|
||||||
|
{
|
||||||
|
int partitionIndex = FindPartitionIndex(va);
|
||||||
|
if (partitionIndex < 0)
|
||||||
{
|
{
|
||||||
va += PartitionSize - (va & (PartitionSize - 1));
|
va += PartitionSize - (va & (PartitionSize - 1));
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
partition = _partitions[partitionIndex];
|
||||||
|
|
||||||
(ulong clampedVa, ulong clampedEndVa) = ClampRange(partition, va, endVa);
|
(ulong clampedVa, ulong clampedEndVa) = ClampRange(partition, va, endVa);
|
||||||
|
|
||||||
partition.Unmap(clampedVa, clampedEndVa - clampedVa);
|
partition.Unmap(clampedVa, clampedEndVa - clampedVa);
|
||||||
|
@ -74,8 +81,6 @@ namespace Ryujinx.Cpu.Jit
|
||||||
RemoveBridgeIfNeeded(partitionIndex);
|
RemoveBridgeIfNeeded(partitionIndex);
|
||||||
|
|
||||||
if (partition.IsEmpty())
|
if (partition.IsEmpty())
|
||||||
{
|
|
||||||
lock (_partitions)
|
|
||||||
{
|
{
|
||||||
_partitions.Remove(partition);
|
_partitions.Remove(partition);
|
||||||
partition.Dispose();
|
partition.Dispose();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue