Browse Source

SVC: WaitSynchronization add Termination Pending Result.

Fernando Sahmkow 6 years ago
parent
commit
535c542d84
2 changed files with 5 additions and 1 deletions
  1. 1 0
      src/core/hle/kernel/errors.h
  2. 4 1
      src/core/hle/kernel/synchronization.cpp

+ 1 - 0
src/core/hle/kernel/errors.h

@@ -12,6 +12,7 @@ namespace Kernel {
 
 
 constexpr ResultCode ERR_MAX_CONNECTIONS_REACHED{ErrorModule::Kernel, 7};
 constexpr ResultCode ERR_MAX_CONNECTIONS_REACHED{ErrorModule::Kernel, 7};
 constexpr ResultCode ERR_INVALID_CAPABILITY_DESCRIPTOR{ErrorModule::Kernel, 14};
 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_SIZE{ErrorModule::Kernel, 101};
 constexpr ResultCode ERR_INVALID_ADDRESS{ErrorModule::Kernel, 102};
 constexpr ResultCode ERR_INVALID_ADDRESS{ErrorModule::Kernel, 102};
 constexpr ResultCode ERR_OUT_OF_RESOURCES{ErrorModule::Kernel, 103};
 constexpr ResultCode ERR_OUT_OF_RESOURCES{ErrorModule::Kernel, 103};

+ 4 - 1
src/core/hle/kernel/synchronization.cpp

@@ -59,7 +59,10 @@ std::pair<ResultCode, Handle> Synchronization::WaitFor(
             return {RESULT_TIMEOUT, InvalidHandle};
             return {RESULT_TIMEOUT, InvalidHandle};
         }
         }
 
 
-        /// TODO(Blinkhawk): Check for termination pending
+        if (thread->IsPendingTermination()) {
+            lock.CancelSleep();
+            return {ERR_THREAD_TERMINATING, InvalidHandle};
+        }
 
 
         if (thread->IsSyncCancelled()) {
         if (thread->IsSyncCancelled()) {
             thread->SetSyncCancelled(false);
             thread->SetSyncCancelled(false);