summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsakumisu <[email protected]>2026-04-23 19:45:43 +0800
committersakumisu <[email protected]>2026-04-23 19:45:43 +0800
commit65e21ae06b07fe068b86fea547ac80bbf5489f7b (patch)
tree1645213ffa85cd60daded385344d5530f269c9ff
parent633be12577792dedc682328e8a049f6c700431c8 (diff)
fix(class/hub): clear mq &sem at deinit
Signed-off-by: sakumisu <[email protected]>
-rw-r--r--class/hub/usbh_hub.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/class/hub/usbh_hub.c b/class/hub/usbh_hub.c
index f3cdbbb7..5538de86 100644
--- a/class/hub/usbh_hub.c
+++ b/class/hub/usbh_hub.c
@@ -705,7 +705,6 @@ static void usbh_hub_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV)
}
usb_hc_deinit(bus);
usb_osal_mq_delete(bus->hub_mq);
- bus->hub_mq = NULL;
usb_osal_sem_give(bus->hub_sem);
usb_osal_thread_delete(NULL);
}
@@ -756,9 +755,13 @@ int usbh_hub_deinitialize(struct usbh_bus *bus)
if (!bus->hub_mq || !bus->hub_sem) {
return -USB_ERR_INVAL;
}
+
usb_osal_mq_send(bus->hub_mq, (uintptr_t)NULL);
usb_osal_sem_take(bus->hub_sem, USB_OSAL_WAITING_FOREVER);
usb_osal_sem_delete(bus->hub_sem);
+ bus->hub_mq = NULL;
+ bus->hub_sem = NULL;
+
bus->event_handler(bus->busid, USB_HUB_INDEX_ANY, USB_HUB_PORT_ANY, USB_INTERFACE_ANY, USBH_EVENT_DEINIT);
return 0;