diff options
author | bunnei <bunneidev@gmail.com> | 2015-01-18 01:27:46 -0500 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2015-01-21 19:11:47 -0500 |
commit | 6643673f28b9273149fc945849a13ed832e9ef33 (patch) | |
tree | 026410cf5b0b57d350ac979380307991646e546c /src/core/hle/kernel/semaphore.cpp | |
parent | aa01c57ae9d73e41b65d37860ca6fbb91caba33a (diff) |
WaitSynchronizationN: Refactor to fix several bugs
- Separate wait checking from waiting the current thread
- Resume thread when wait_all=true only if all objects are available at once
- Set output to correct wait object index when there are duplicate handles
Diffstat (limited to 'src/core/hle/kernel/semaphore.cpp')
-rw-r--r-- | src/core/hle/kernel/semaphore.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/core/hle/kernel/semaphore.cpp b/src/core/hle/kernel/semaphore.cpp index 6464b258..42b5cf70 100644 --- a/src/core/hle/kernel/semaphore.cpp +++ b/src/core/hle/kernel/semaphore.cpp @@ -32,11 +32,11 @@ public: return available_count > 0; } - ResultVal<bool> Wait(unsigned index) override { + ResultVal<bool> Wait(bool wait_thread) override { bool wait = !IsAvailable(); - if (wait) { - Kernel::WaitCurrentThread_WaitSynchronization(WAITTYPE_SEMA, this, index); + if (wait && wait_thread) { + Kernel::WaitCurrentThread_WaitSynchronization(WAITTYPE_SEMA, this); AddWaitingThread(GetCurrentThread()); } |