From eafadf10c7d8fe51ca6af11aadef64f5f6bcf8e0 Mon Sep 17 00:00:00 2001 From: merry Date: Mon, 24 Oct 2022 00:51:54 +0100 Subject: Ryujinx.Tests.Unicorn: Implement IDisposable (#3794) Dispose unicorn when done --- Ryujinx.Tests.Unicorn/UnicornAArch32.cs | 20 ++++++++++++++++++-- Ryujinx.Tests.Unicorn/UnicornAArch64.cs | 20 ++++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) (limited to 'Ryujinx.Tests.Unicorn') diff --git a/Ryujinx.Tests.Unicorn/UnicornAArch32.cs b/Ryujinx.Tests.Unicorn/UnicornAArch32.cs index e1efb52f..e634e0d2 100644 --- a/Ryujinx.Tests.Unicorn/UnicornAArch32.cs +++ b/Ryujinx.Tests.Unicorn/UnicornAArch32.cs @@ -3,9 +3,10 @@ using System; namespace Ryujinx.Tests.Unicorn { - public class UnicornAArch32 + public class UnicornAArch32 : IDisposable { internal readonly IntPtr uc; + private bool _isDisposed = false; public IndexedProperty R { @@ -107,7 +108,22 @@ namespace Ryujinx.Tests.Unicorn ~UnicornAArch32() { - Interface.Checked(Native.Interface.uc_close(uc)); + Dispose(false); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!_isDisposed) + { + Interface.Checked(Native.Interface.uc_close(uc)); + _isDisposed = true; + } } public void RunForCount(ulong count) diff --git a/Ryujinx.Tests.Unicorn/UnicornAArch64.cs b/Ryujinx.Tests.Unicorn/UnicornAArch64.cs index 4453d18d..c5d5540b 100644 --- a/Ryujinx.Tests.Unicorn/UnicornAArch64.cs +++ b/Ryujinx.Tests.Unicorn/UnicornAArch64.cs @@ -3,9 +3,10 @@ using System; namespace Ryujinx.Tests.Unicorn { - public class UnicornAArch64 + public class UnicornAArch64 : IDisposable { internal readonly IntPtr uc; + private bool _isDisposed = false; public IndexedProperty X { @@ -96,7 +97,22 @@ namespace Ryujinx.Tests.Unicorn ~UnicornAArch64() { - Interface.Checked(Native.Interface.uc_close(uc)); + Dispose(false); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!_isDisposed) + { + Interface.Checked(Native.Interface.uc_close(uc)); + _isDisposed = true; + } } public void RunForCount(ulong count) -- cgit v1.2.3