summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/hid_core/resource_manager.cpp1
-rw-r--r--src/hid_core/resources/applet_resource.cpp34
-rw-r--r--src/hid_core/resources/npad/npad_resource.cpp4
3 files changed, 18 insertions, 21 deletions
diff --git a/src/hid_core/resource_manager.cpp b/src/hid_core/resource_manager.cpp
index 17dacef6e..2c5fe6d51 100644
--- a/src/hid_core/resource_manager.cpp
+++ b/src/hid_core/resource_manager.cpp
@@ -224,6 +224,7 @@ Result ResourceManager::RegisterAppletResourceUserId(u64 aruid, bool bool_value)
void ResourceManager::UnregisterAppletResourceUserId(u64 aruid) {
std::scoped_lock lock{shared_mutex};
applet_resource->UnregisterAppletResourceUserId(aruid);
+ npad->UnregisterAppletResourceUserId(aruid);
}
Result ResourceManager::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid) {
diff --git a/src/hid_core/resources/applet_resource.cpp b/src/hid_core/resources/applet_resource.cpp
index d16cff1a4..d09a525c6 100644
--- a/src/hid_core/resources/applet_resource.cpp
+++ b/src/hid_core/resources/applet_resource.cpp
@@ -87,7 +87,9 @@ Result AppletResource::RegisterAppletResourceUserId(u64 aruid, bool enable_input
data_index = i;
break;
}
- if (registration_list.flag[i] == RegistrationStatus::None) {
+ // TODO: Don't Handle pending delete here
+ if (registration_list.flag[i] == RegistrationStatus::None ||
+ registration_list.flag[i] == RegistrationStatus::PendingDelete) {
data_index = i;
break;
}
@@ -104,30 +106,22 @@ Result AppletResource::RegisterAppletResourceUserId(u64 aruid, bool enable_input
}
void AppletResource::UnregisterAppletResourceUserId(u64 aruid) {
- u64 index = GetIndexFromAruid(aruid);
+ const u64 index = GetIndexFromAruid(aruid);
- if (index < AruidIndexMax) {
- if (data[index].flag.is_assigned) {
- data[index].shared_memory_format = nullptr;
- data[index].flag.is_assigned.Assign(false);
- }
+ if (index >= AruidIndexMax) {
+ return;
}
- index = GetIndexFromAruid(aruid);
- if (index < AruidIndexMax) {
- DestroySevenSixAxisTransferMemory();
- data[index].flag.raw = 0;
- data[index].aruid = 0;
+ FreeAppletResourceId(aruid);
+ DestroySevenSixAxisTransferMemory();
+ data[index].flag.raw = 0;
+ data[index].aruid = 0;
- index = GetIndexFromAruid(aruid);
- if (index < AruidIndexMax) {
- registration_list.flag[index] = RegistrationStatus::PendingDelete;
- }
- }
+ registration_list.flag[index] = RegistrationStatus::PendingDelete;
}
void AppletResource::FreeAppletResourceId(u64 aruid) {
- u64 index = GetIndexFromAruid(aruid);
+ const u64 index = GetIndexFromAruid(aruid);
if (index >= AruidIndexMax) {
return;
}
@@ -144,7 +138,7 @@ u64 AppletResource::GetActiveAruid() {
}
Result AppletResource::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle, u64 aruid) {
- u64 index = GetIndexFromAruid(aruid);
+ const u64 index = GetIndexFromAruid(aruid);
if (index >= AruidIndexMax) {
return ResultAruidNotRegistered;
}
@@ -155,7 +149,7 @@ Result AppletResource::GetSharedMemoryHandle(Kernel::KSharedMemory** out_handle,
Result AppletResource::GetSharedMemoryFormat(SharedMemoryFormat** out_shared_memory_format,
u64 aruid) {
- u64 index = GetIndexFromAruid(aruid);
+ const u64 index = GetIndexFromAruid(aruid);
if (index >= AruidIndexMax) {
return ResultAruidNotRegistered;
}
diff --git a/src/hid_core/resources/npad/npad_resource.cpp b/src/hid_core/resources/npad/npad_resource.cpp
index b0255a05c..ea9fc14ed 100644
--- a/src/hid_core/resources/npad/npad_resource.cpp
+++ b/src/hid_core/resources/npad/npad_resource.cpp
@@ -46,7 +46,9 @@ Result NPadResource::RegisterAppletResourceUserId(u64 aruid) {
data_index = i;
break;
}
- if (registration_list.flag[i] == RegistrationStatus::None) {
+ // TODO: Don't Handle pending delete here
+ if (registration_list.flag[i] == RegistrationStatus::None ||
+ registration_list.flag[i] == RegistrationStatus::PendingDelete) {
data_index = i;
break;
}