diff options
| author | 2015-01-18 01:27:46 -0500 | |
|---|---|---|
| committer | 2015-01-21 19:11:47 -0500 | |
| commit | 6643673f28b9273149fc945849a13ed832e9ef33 (patch) | |
| tree | 026410cf5b0b57d350ac979380307991646e546c /src/core/hle/kernel/mutex.cpp | |
| parent | Kernel: Separate WaitSynchronization into Wait and Acquire methods. (diff) | |
| download | yuzu-6643673f28b9273149fc945849a13ed832e9ef33.tar.gz yuzu-6643673f28b9273149fc945849a13ed832e9ef33.tar.xz yuzu-6643673f28b9273149fc945849a13ed832e9ef33.zip | |
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/mutex.cpp')
| -rw-r--r-- | src/core/hle/kernel/mutex.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp index 37e7be4e7..f97c69a78 100644 --- a/src/core/hle/kernel/mutex.cpp +++ b/src/core/hle/kernel/mutex.cpp | |||
| @@ -26,7 +26,7 @@ public: | |||
| 26 | Handle lock_thread; ///< Handle to thread that currently has mutex | 26 | Handle lock_thread; ///< Handle to thread that currently has mutex |
| 27 | std::string name; ///< Name of mutex (optional) | 27 | std::string name; ///< Name of mutex (optional) |
| 28 | 28 | ||
| 29 | ResultVal<bool> Wait(unsigned index) override; | 29 | ResultVal<bool> Wait(bool wait_thread) override; |
| 30 | ResultVal<bool> Acquire() override; | 30 | ResultVal<bool> Acquire() override; |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| @@ -156,10 +156,10 @@ Handle CreateMutex(bool initial_locked, const std::string& name) { | |||
| 156 | return handle; | 156 | return handle; |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | ResultVal<bool> Mutex::Wait(unsigned index) { | 159 | ResultVal<bool> Mutex::Wait(bool wait_thread) { |
| 160 | if (locked) { | 160 | if (locked && wait_thread) { |
| 161 | AddWaitingThread(GetCurrentThread()); | 161 | AddWaitingThread(GetCurrentThread()); |
| 162 | Kernel::WaitCurrentThread_WaitSynchronization(WAITTYPE_MUTEX, this, index); | 162 | Kernel::WaitCurrentThread_WaitSynchronization(WAITTYPE_MUTEX, this); |
| 163 | } | 163 | } |
| 164 | 164 | ||
| 165 | return MakeResult<bool>(locked); | 165 | return MakeResult<bool>(locked); |