summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/mutex.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2015-01-18 01:27:46 -0500
committerGravatar bunnei2015-01-21 19:11:47 -0500
commit6643673f28b9273149fc945849a13ed832e9ef33 (patch)
tree026410cf5b0b57d350ac979380307991646e546c /src/core/hle/kernel/mutex.cpp
parentKernel: Separate WaitSynchronization into Wait and Acquire methods. (diff)
downloadyuzu-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.cpp8
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
159ResultVal<bool> Mutex::Wait(unsigned index) { 159ResultVal<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);