aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/ArmProcessContext.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/ArmProcessContext.cs')
-rw-r--r--Ryujinx.HLE/HOS/ArmProcessContext.cs31
1 files changed, 25 insertions, 6 deletions
diff --git a/Ryujinx.HLE/HOS/ArmProcessContext.cs b/Ryujinx.HLE/HOS/ArmProcessContext.cs
index fb7703b7..ae5fe601 100644
--- a/Ryujinx.HLE/HOS/ArmProcessContext.cs
+++ b/Ryujinx.HLE/HOS/ArmProcessContext.cs
@@ -1,24 +1,43 @@
-using ARMeilleure.State;
+using ARMeilleure.Memory;
+using ARMeilleure.State;
using Ryujinx.Cpu;
using Ryujinx.HLE.HOS.Kernel.Process;
using Ryujinx.Memory;
+using System;
namespace Ryujinx.HLE.HOS
{
- class ArmProcessContext : IProcessContext
+ class ArmProcessContext<T> : IProcessContext where T : class, IVirtualMemoryManager, IMemoryManager
{
- private readonly MemoryManager _memoryManager;
private readonly CpuContext _cpuContext;
+ private T _memoryManager;
public IVirtualMemoryManager AddressSpace => _memoryManager;
- public ArmProcessContext(MemoryManager memoryManager)
+ public ArmProcessContext(T memoryManager)
{
+ if (memoryManager is IRefCounted rc)
+ {
+ rc.IncrementReferenceCount();
+ }
+
_memoryManager = memoryManager;
_cpuContext = new CpuContext(memoryManager);
}
- public void Execute(ExecutionContext context, ulong codeAddress) => _cpuContext.Execute(context, codeAddress);
- public void Dispose() => _memoryManager.Dispose();
+ public void Execute(ExecutionContext context, ulong codeAddress)
+ {
+ _cpuContext.Execute(context, codeAddress);
+ }
+
+ public void Dispose()
+ {
+ if (_memoryManager is IRefCounted rc)
+ {
+ rc.DecrementReferenceCount();
+
+ _memoryManager = null;
+ }
+ }
}
}