From bcd80ab445258c20d968aad1c083fd8cb0937bee Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Thu, 8 Nov 2018 16:00:04 -0800 Subject: [PATCH] Fix domain unallocation failure in WaitableManager --- include/stratosphere/waitable_manager.hpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/include/stratosphere/waitable_manager.hpp b/include/stratosphere/waitable_manager.hpp index 47244e56..f7fcb810 100644 --- a/include/stratosphere/waitable_manager.hpp +++ b/include/stratosphere/waitable_manager.hpp @@ -48,7 +48,7 @@ class WaitableManager : public SessionManagerBase { private: /* Domain Manager */ HosMutex domain_lock; - std::array, ManagerOptions::MaxDomains> domains; + std::array domain_keys; std::array is_domain_allocated; std::array domain_objects; @@ -323,7 +323,7 @@ class WaitableManager : public SessionManagerBase { for (size_t i = 0; i < ManagerOptions::MaxDomains; i++) { if (!this->is_domain_allocated[i]) { auto new_domain = std::make_shared(this); - this->domains[i] = new_domain; + this->domain_keys[i] = reinterpret_cast(new_domain.get()); this->is_domain_allocated[i] = true; return new_domain; } @@ -337,8 +337,7 @@ class WaitableManager : public SessionManagerBase { FreeObject(domain, i+1); } for (size_t i = 0; i < ManagerOptions::MaxDomains; i++) { - auto observe = this->domains[i].lock(); - if (observe.get() == domain) { + if (this->domain_keys[i] == reinterpret_cast(domain)) { this->is_domain_allocated[i] = false; break; }