mirror of
https://github.com/Atmosphere-NX/Atmosphere-libs.git
synced 2025-06-25 12:32:41 +02:00
Fix domain unallocation failure in WaitableManager
This commit is contained in:
parent
3e87318090
commit
bcd80ab445
@ -48,7 +48,7 @@ class WaitableManager : public SessionManagerBase {
|
|||||||
private:
|
private:
|
||||||
/* Domain Manager */
|
/* Domain Manager */
|
||||||
HosMutex domain_lock;
|
HosMutex domain_lock;
|
||||||
std::array<std::weak_ptr<IDomainObject>, ManagerOptions::MaxDomains> domains;
|
std::array<uintptr_t, ManagerOptions::MaxDomains> domain_keys;
|
||||||
std::array<bool, ManagerOptions::MaxDomains> is_domain_allocated;
|
std::array<bool, ManagerOptions::MaxDomains> is_domain_allocated;
|
||||||
std::array<DomainEntry, ManagerOptions::MaxDomainObjects> domain_objects;
|
std::array<DomainEntry, ManagerOptions::MaxDomainObjects> domain_objects;
|
||||||
|
|
||||||
@ -323,7 +323,7 @@ class WaitableManager : public SessionManagerBase {
|
|||||||
for (size_t i = 0; i < ManagerOptions::MaxDomains; i++) {
|
for (size_t i = 0; i < ManagerOptions::MaxDomains; i++) {
|
||||||
if (!this->is_domain_allocated[i]) {
|
if (!this->is_domain_allocated[i]) {
|
||||||
auto new_domain = std::make_shared<IDomainObject>(this);
|
auto new_domain = std::make_shared<IDomainObject>(this);
|
||||||
this->domains[i] = new_domain;
|
this->domain_keys[i] = reinterpret_cast<uintptr_t>(new_domain.get());
|
||||||
this->is_domain_allocated[i] = true;
|
this->is_domain_allocated[i] = true;
|
||||||
return new_domain;
|
return new_domain;
|
||||||
}
|
}
|
||||||
@ -337,8 +337,7 @@ class WaitableManager : public SessionManagerBase {
|
|||||||
FreeObject(domain, i+1);
|
FreeObject(domain, i+1);
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < ManagerOptions::MaxDomains; i++) {
|
for (size_t i = 0; i < ManagerOptions::MaxDomains; i++) {
|
||||||
auto observe = this->domains[i].lock();
|
if (this->domain_keys[i] == reinterpret_cast<uintptr_t>(domain)) {
|
||||||
if (observe.get() == domain) {
|
|
||||||
this->is_domain_allocated[i] = false;
|
this->is_domain_allocated[i] = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user