This is an automated email from the ASF dual-hosted git repository. jerpelea pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit cacf519a961af4cc7f9d383cd65a324b4c194d57 Author: Javier Alonso <[email protected]> AuthorDate: Fri Jul 24 12:25:40 2026 +0200 stm32: Detach GPIO IRQ callbacks upon clearing "setevent" When the interrupts get disabled, the callback(s) are still attached. That structure is never cleared, causing several calls to attach/detach to eventually fail as the callback queue gets full. When the error occurs, the registration fails with error 12 (ENOMEM). By detaching the IRQ and clearing the callbacks, this error doesn't happen again Signed-off-by: Javier Alonso <[email protected]> --- arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c b/arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c index 00b9158085c..b143d31dc9e 100644 --- a/arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c +++ b/arch/arm/src/common/stm32/stm32_exti_gpio_m0_v1.c @@ -221,6 +221,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge, xcpt_t handler; int nshared; int i; + int ret; /* Select the interrupt handler for this EXTI pin */ @@ -274,6 +275,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge, if (i == nshared) { + /* remove any leftover callback */ + + ret = irq_detach(irq); + if (ret < 0) + { + return ret; + } + + /* disable the interrupt */ + up_disable_irq(irq); } }
