diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/ArmProcessContext.cs')
-rw-r--r-- | Ryujinx.HLE/HOS/ArmProcessContext.cs | 31 |
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; + } + } } } |