|
|
|
@ -81,9 +81,8 @@ QString WaitTreeText::GetText() const { |
|
|
|
return text; |
|
|
|
} |
|
|
|
|
|
|
|
WaitTreeMutexInfo::WaitTreeMutexInfo(VAddr mutex_address) : mutex_address(mutex_address) { |
|
|
|
const auto& handle_table = Core::CurrentProcess()->GetHandleTable(); |
|
|
|
|
|
|
|
WaitTreeMutexInfo::WaitTreeMutexInfo(VAddr mutex_address, const Kernel::HandleTable& handle_table) |
|
|
|
: mutex_address(mutex_address) { |
|
|
|
mutex_value = Memory::Read32(mutex_address); |
|
|
|
owner_handle = static_cast<Kernel::Handle>(mutex_value & Kernel::Mutex::MutexOwnerMask); |
|
|
|
owner = handle_table.Get<Kernel::Thread>(owner_handle); |
|
|
|
@ -316,7 +315,8 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeThread::GetChildren() const { |
|
|
|
|
|
|
|
const VAddr mutex_wait_address = thread.GetMutexWaitAddress(); |
|
|
|
if (mutex_wait_address != 0) { |
|
|
|
list.push_back(std::make_unique<WaitTreeMutexInfo>(mutex_wait_address)); |
|
|
|
const auto& handle_table = thread.GetOwnerProcess()->GetHandleTable(); |
|
|
|
list.push_back(std::make_unique<WaitTreeMutexInfo>(mutex_wait_address, handle_table)); |
|
|
|
} else { |
|
|
|
list.push_back(std::make_unique<WaitTreeText>(tr("not waiting for mutex"))); |
|
|
|
} |
|
|
|
|