aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS
diff options
context:
space:
mode:
authorThog <me@thog.eu>2020-02-06 12:38:24 +0100
committerGitHub <noreply@github.com>2020-02-06 12:38:24 +0100
commita906f2071cbe4caf53c697bcb7dfa91e3e7dcfae (patch)
treea432e5c068ef43e4cc9ce21800a3903547d8f63c /Ryujinx.HLE/HOS
parentf2b9a9c2b0a3d7af3b56df9ae09db8a3b2d8506c (diff)
Fix a crash when closing the main UI (#904)
* Fix a crash when closing the main Ui Also make sure to dispose the OpenAL context to not leak memory when unloading the emulation context. * Improve keys and 'game already running' dialogs * Make sure to dispose the page table and ThreadContext Less memory leaks! * Fix tests * Address gdk's comments
Diffstat (limited to 'Ryujinx.HLE/HOS')
-rw-r--r--Ryujinx.HLE/HOS/Horizon.cs5
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs5
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs2
3 files changed, 11 insertions, 1 deletions
diff --git a/Ryujinx.HLE/HOS/Horizon.cs b/Ryujinx.HLE/HOS/Horizon.cs
index a2bff7f6..f8d2ed71 100644
--- a/Ryujinx.HLE/HOS/Horizon.cs
+++ b/Ryujinx.HLE/HOS/Horizon.cs
@@ -107,6 +107,7 @@ namespace Ryujinx.HLE.HOS
public Keyset KeySet => Device.FileSystem.KeySet;
private bool _hasStarted;
+ private bool _isDisposed;
public BlitStruct<ApplicationControlProperty> ControlData { get; set; }
@@ -740,8 +741,10 @@ namespace Ryujinx.HLE.HOS
protected virtual void Dispose(bool disposing)
{
- if (disposing)
+ if (!_isDisposed && disposing)
{
+ _isDisposed = true;
+
KProcess terminationProcess = new KProcess(this);
KThread terminationThread = new KThread(this);
diff --git a/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs b/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs
index f987c83c..7807ec5a 100644
--- a/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs
@@ -1131,5 +1131,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Process
{
throw new UndefinedInstructionException(e.Address, e.OpCode);
}
+
+ protected override void Destroy()
+ {
+ CpuMemory.Dispose();
+ }
}
} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs b/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
index c4bd781d..53eb5bdc 100644
--- a/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Threading/KThread.cs
@@ -1141,6 +1141,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Threading
{
Owner.Translator.Execute(Context, entrypoint);
+ Context.Dispose();
+
ThreadExit();
}