summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2020-03-07 18:37:47 +0100
committerFernando Sahmkow <fsahmkow27@gmail.com>2020-06-27 17:35:36 +0200
commit535c542d84ea56b5710bf84af3fba6272913f48e (patch)
treebaf3236ce4b9341b8f11e450be7e8b39ad67d524
parentScheduler: Remove arm_interface lock and a few corrections. (diff)
downloadyuzu-535c542d84ea56b5710bf84af3fba6272913f48e.tar
yuzu-535c542d84ea56b5710bf84af3fba6272913f48e.tar.gz
yuzu-535c542d84ea56b5710bf84af3fba6272913f48e.tar.bz2
yuzu-535c542d84ea56b5710bf84af3fba6272913f48e.tar.lz
yuzu-535c542d84ea56b5710bf84af3fba6272913f48e.tar.xz
yuzu-535c542d84ea56b5710bf84af3fba6272913f48e.tar.zst
yuzu-535c542d84ea56b5710bf84af3fba6272913f48e.zip
-rw-r--r--src/core/hle/kernel/errors.h1
-rw-r--r--src/core/hle/kernel/synchronization.cpp5
2 files changed, 5 insertions, 1 deletions
diff --git a/src/core/hle/kernel/errors.h b/src/core/hle/kernel/errors.h
index 29bfa3621..d4e5d88cf 100644
--- a/src/core/hle/kernel/errors.h
+++ b/src/core/hle/kernel/errors.h
@@ -12,6 +12,7 @@ namespace Kernel {
constexpr ResultCode ERR_MAX_CONNECTIONS_REACHED{ErrorModule::Kernel, 7};
constexpr ResultCode ERR_INVALID_CAPABILITY_DESCRIPTOR{ErrorModule::Kernel, 14};
+constexpr ResultCode ERR_THREAD_TERMINATING{ErrorModule::Kernel, 59};
constexpr ResultCode ERR_INVALID_SIZE{ErrorModule::Kernel, 101};
constexpr ResultCode ERR_INVALID_ADDRESS{ErrorModule::Kernel, 102};
constexpr ResultCode ERR_OUT_OF_RESOURCES{ErrorModule::Kernel, 103};
diff --git a/src/core/hle/kernel/synchronization.cpp b/src/core/hle/kernel/synchronization.cpp
index a7e3fbe92..4323fc120 100644
--- a/src/core/hle/kernel/synchronization.cpp
+++ b/src/core/hle/kernel/synchronization.cpp
@@ -59,7 +59,10 @@ std::pair<ResultCode, Handle> Synchronization::WaitFor(
return {RESULT_TIMEOUT, InvalidHandle};
}
- /// TODO(Blinkhawk): Check for termination pending
+ if (thread->IsPendingTermination()) {
+ lock.CancelSleep();
+ return {ERR_THREAD_TERMINATING, InvalidHandle};
+ }
if (thread->IsSyncCancelled()) {
thread->SetSyncCancelled(false);