Просмотр исходного кода

update(class/hub): remove hport sources safely

Signed-off-by: sakumisu <1203593632@qq.com>
sakumisu 1 месяц назад
Родитель
Сommit
aa2f16bf72
2 измененных файлов с 12 добавлено и 0 удалено
  1. 11 0
      class/hub/usbh_hub.c
  2. 1 0
      core/usbh_core.h

+ 11 - 0
class/hub/usbh_hub.c

@@ -670,7 +670,9 @@ static void usbh_hub_thread(CONFIG_USB_OSAL_THREAD_SET_ARGV)
         if (ret < 0) {
             continue;
         }
+        usb_osal_mutex_take(bus->mutex);
         usbh_hub_events(hub);
+        usb_osal_mutex_give(bus->mutex);
     }
 }
 
@@ -700,6 +702,12 @@ int usbh_hub_initialize(struct usbh_bus *bus)
         return -1;
     }
 
+    bus->mutex = usb_osal_mutex_create();
+    if (bus->mutex == NULL) {
+        USB_LOG_ERR("Failed to create bus mutex\r\n");
+        return -1;
+    }
+
     snprintf(thread_name, 32, "usbh_hub%u", bus->busid);
     bus->hub_thread = usb_osal_thread_create(thread_name, CONFIG_USBHOST_PSC_STACKSIZE, CONFIG_USBHOST_PSC_PRIO, usbh_hub_thread, bus);
     if (bus->hub_thread == NULL) {
@@ -714,6 +722,7 @@ int usbh_hub_deinitialize(struct usbh_bus *bus)
     struct usbh_hubport *hport;
     struct usbh_hub *hub;
 
+    usb_osal_mutex_take(bus->mutex);
     hub = &bus->hcd.roothub;
     for (uint8_t port = 0; port < hub->nports; port++) {
         hport = &hub->child[port];
@@ -726,6 +735,8 @@ int usbh_hub_deinitialize(struct usbh_bus *bus)
     usb_osal_thread_delete(bus->hub_thread);
     usb_osal_mq_delete(bus->hub_mq);
 
+    usb_osal_mutex_give(bus->mutex);
+    usb_osal_mutex_delete(bus->mutex);
     return 0;
 }
 

+ 1 - 0
core/usbh_core.h

@@ -170,6 +170,7 @@ struct usbh_bus {
     struct usbh_devaddr_map devgen;
     usb_osal_thread_t hub_thread;
     usb_osal_mq_t hub_mq;
+    usb_osal_mutex_t mutex;
 };
 
 static inline void usbh_control_urb_fill(struct usbh_urb *urb,