summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/mutex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/mutex.cpp')
-rw-r--r--src/core/hle/kernel/mutex.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp
index 78063b8f1..37e7be4e7 100644
--- a/src/core/hle/kernel/mutex.cpp
+++ b/src/core/hle/kernel/mutex.cpp
@@ -26,7 +26,8 @@ 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> WaitSynchronization(unsigned index) override; 29 ResultVal<bool> Wait(unsigned index) override;
30 ResultVal<bool> Acquire() override;
30}; 31};
31 32
32//////////////////////////////////////////////////////////////////////////////////////////////////// 33////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -155,17 +156,25 @@ Handle CreateMutex(bool initial_locked, const std::string& name) {
155 return handle; 156 return handle;
156} 157}
157 158
158ResultVal<bool> Mutex::WaitSynchronization(unsigned index) { 159ResultVal<bool> Mutex::Wait(unsigned index) {
159 bool wait = locked;
160 if (locked) { 160 if (locked) {
161 AddWaitingThread(GetCurrentThread()); 161 AddWaitingThread(GetCurrentThread());
162 Kernel::WaitCurrentThread_WaitSynchronization(WAITTYPE_MUTEX, this, index); 162 Kernel::WaitCurrentThread_WaitSynchronization(WAITTYPE_MUTEX, this, index);
163 } else { 163 }
164
165 return MakeResult<bool>(locked);
166}
167
168ResultVal<bool> Mutex::Acquire() {
169 bool res = false;
170
171 if (!locked) {
164 // Lock the mutex when the first thread accesses it 172 // Lock the mutex when the first thread accesses it
165 locked = true; 173 locked = true;
174 res = true;
166 MutexAcquireLock(this); 175 MutexAcquireLock(this);
167 } 176 }
168 177
169 return MakeResult<bool>(wait); 178 return MakeResult<bool>(res);
170} 179}
171} // namespace 180} // namespace