diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/mutex.cpp | 5 | 
1 files changed, 4 insertions, 1 deletions
| diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp index 4a1eaca37..6cd140376 100644 --- a/src/core/hle/kernel/mutex.cpp +++ b/src/core/hle/kernel/mutex.cpp @@ -25,6 +25,7 @@ public:      bool locked;                                ///< Current locked state      Handle lock_thread;                         ///< Handle to thread that currently has mutex      std::string name;                           ///< Name of mutex (optional) +    SharedPtr<Thread> current_thread;           ///< Thread that has acquired the mutex      ResultVal<bool> Wait() override;      ResultVal<bool> Acquire() override; @@ -43,6 +44,7 @@ static MutexMap g_mutex_held_locks;  void MutexAcquireLock(Mutex* mutex, Handle thread = GetCurrentThread()->GetHandle()) {      g_mutex_held_locks.insert(std::make_pair(thread, mutex->GetHandle()));      mutex->lock_thread = thread; +    mutex->current_thread = Kernel::g_handle_table.Get<Thread>(thread);  }  /** @@ -132,6 +134,7 @@ Mutex* CreateMutex(Handle& handle, bool initial_locked, const std::string& name)      mutex->locked = mutex->initial_locked = initial_locked;      mutex->name = name; +    mutex->current_thread = nullptr;      // Acquire mutex with current thread if initialized as locked...      if (mutex->locked) { @@ -157,7 +160,7 @@ Handle CreateMutex(bool initial_locked, const std::string& name) {  }  ResultVal<bool> Mutex::Wait() { -    return MakeResult<bool>(locked); +    return MakeResult<bool>(locked && (current_thread != GetCurrentThread()));  }  ResultVal<bool> Mutex::Acquire() { | 
