diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-03-07 19:16:25 +0100 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2020-06-27 17:35:58 +0200 |
commit | 5974e3ea33e12e7abd813704e5b895003ba83555 (patch) | |
tree | a72710344f6436cf5bd91eab3424b89188123285 /src/core | |
parent | General: Move ARM_Interface into Threads. (diff) | |
download | yuzu-5974e3ea33e12e7abd813704e5b895003ba83555.tar yuzu-5974e3ea33e12e7abd813704e5b895003ba83555.tar.gz yuzu-5974e3ea33e12e7abd813704e5b895003ba83555.tar.bz2 yuzu-5974e3ea33e12e7abd813704e5b895003ba83555.tar.lz yuzu-5974e3ea33e12e7abd813704e5b895003ba83555.tar.xz yuzu-5974e3ea33e12e7abd813704e5b895003ba83555.tar.zst yuzu-5974e3ea33e12e7abd813704e5b895003ba83555.zip |
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/hle/kernel/scheduler.cpp | 2 | ||||
-rw-r--r-- | src/core/hle/kernel/thread.cpp | 2 | ||||
-rw-r--r-- | src/core/hle/kernel/thread.h | 5 |
3 files changed, 8 insertions, 1 deletions
diff --git a/src/core/hle/kernel/scheduler.cpp b/src/core/hle/kernel/scheduler.cpp index a5083ae7c..ce7e1986d 100644 --- a/src/core/hle/kernel/scheduler.cpp +++ b/src/core/hle/kernel/scheduler.cpp @@ -724,7 +724,7 @@ void Scheduler::SwitchContext() { previous_thread->SetContinuousOnSVC(false); previous_thread->last_running_ticks = system.CoreTiming().GetCPUTicks(); previous_thread->SetIsRunning(false); - if (!previous_thread->IsHLEThread()) { + if (!previous_thread->IsHLEThread() && !previous_thread->HasExited()) { Core::ARM_Interface& cpu_core = previous_thread->ArmInterface(); cpu_core.SaveContext(previous_thread->GetContext32()); cpu_core.SaveContext(previous_thread->GetContext64()); diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 58b06aa9e..65fedfc9b 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -69,6 +69,8 @@ void Thread::Stop() { // Mark the TLS slot in the thread's page as free. owner_process->FreeTLSRegion(tls_address); } + arm_interface.reset(); + has_exited = true; } global_handle = 0; } diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index c08fc3a89..f651d7822 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -610,6 +610,10 @@ public: is_phantom_mode = phantom; } + bool HasExited() const { + return has_exited; + } + private: friend class GlobalScheduler; friend class Scheduler; @@ -714,6 +718,7 @@ private: bool will_be_terminated = false; bool is_phantom_mode = false; + bool has_exited = false; bool was_running = false; |