1
0
Fork 0
forked from suyu/suyu

yuzu/debugger/wait_tree: Remove use of global CurrentProcess accessor

We already have the thread instance that was created under the current
process, so we can just pass the handle table of it along to retrieve
the owner of the mutex.
This commit is contained in:
Lioncash 2019-03-05 21:52:19 -05:00
parent cc92c054ec
commit 196cc82913
2 changed files with 6 additions and 5 deletions

View file

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

View file

@ -17,6 +17,7 @@
class EmuThread; class EmuThread;
namespace Kernel { namespace Kernel {
class HandleTable;
class ReadableEvent; class ReadableEvent;
class WaitObject; class WaitObject;
class Thread; class Thread;
@ -72,7 +73,7 @@ public:
class WaitTreeMutexInfo : public WaitTreeExpandableItem { class WaitTreeMutexInfo : public WaitTreeExpandableItem {
Q_OBJECT Q_OBJECT
public: public:
explicit WaitTreeMutexInfo(VAddr mutex_address); explicit WaitTreeMutexInfo(VAddr mutex_address, const Kernel::HandleTable& handle_table);
~WaitTreeMutexInfo() override; ~WaitTreeMutexInfo() override;
QString GetText() const override; QString GetText() const override;