From b90cde35a3453500b09672b31796c8a8434d53bb Mon Sep 17 00:00:00 2001 From: PavelBARABANOV Date: Thu, 24 Sep 2026 19:28:26 +0300 Subject: [PATCH] partial revert [hid_core] fix LM2 crash due to callbacks not being removed properly (#4178) --- src/hid_core/resources/npad/npad.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/hid_core/resources/npad/npad.cpp b/src/hid_core/resources/npad/npad.cpp index c67f839df1..2b04e2c670 100644 --- a/src/hid_core/resources/npad/npad.cpp +++ b/src/hid_core/resources/npad/npad.cpp @@ -45,6 +45,19 @@ NPad::NPad(Core::HID::HIDCore& hid_core_, KernelHelpers::ServiceContext& service AbstractPad{hid_core_.kernel}, }} { + for (std::size_t aruid_index = 0; aruid_index < AruidIndexMax; ++aruid_index) { + for (std::size_t i = 0; i < controller_data[aruid_index].size(); ++i) { + auto& controller = controller_data[aruid_index][i]; + controller.device = hid_core.GetEmulatedControllerByIndex(i); + Core::HID::ControllerUpdateCallback engine_callback{ + .on_change = [this, i, kernel = &hid_core.kernel](Core::HID::ControllerTriggerType type) { + ControllerUpdate(*kernel, type, i); + }, + .is_npad_service = true, + }; + controller.callback_key = controller.device->SetCallback(engine_callback); + } + } for (std::size_t i = 0; i < abstracted_pads.size(); ++i) { abstracted_pads[i].SetNpadId(IndexToNpadIdType(i)); } @@ -93,16 +106,6 @@ Result NPad::Activate(u64 aruid) { for (std::size_t i = 0; i < controller_data[aruid_index].size(); ++i) { auto& controller = controller_data[aruid_index][i]; controller.shared_memory = &data->shared_memory_format->npad.npad_entry[i].internal_state; - controller.device = hid_core.GetEmulatedControllerByIndex(i); - if (!controller.callback_key) { - Core::HID::ControllerUpdateCallback engine_callback{ - .on_change = [this, i](Core::HID::ControllerTriggerType type) { - ControllerUpdate(hid_core.kernel, type, i); - }, - .is_npad_service = true, - }; - controller.callback_key = controller.device->SetCallback(engine_callback); - } } // Prefill controller buffers