From 9e145c5d30de0065f8513e7e7f48da345949ea14 Mon Sep 17 00:00:00 2001
From: Tomas Rezucha <tomas.rezucha@espressif.com>
Date: Mon, 10 Oct 2022 11:52:48 +0200
Subject: [PATCH] usb_host: Fixed incorrect opening devices from multiple
 clients

1. During USBH device open both queues (idle and pending) must be checked.
2. Don't overwrite already allocated endpoints
---
 components/usb/usbh.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/components/usb/usbh.c b/components/usb/usbh.c
index 6426e16c8f4a..aad2f54defd0 100644
--- a/components/usb/usbh.c
+++ b/components/usb/usbh.c
@@ -536,7 +536,7 @@ esp_err_t usbh_dev_open(uint8_t dev_addr, usb_device_handle_t *dev_hdl)
             goto exit;
         }
     }
-    TAILQ_FOREACH(dev_obj, &p_usbh_obj->dynamic.devs_idle_tailq, dynamic.tailq_entry) {
+    TAILQ_FOREACH(dev_obj, &p_usbh_obj->dynamic.devs_pending_tailq, dynamic.tailq_entry) {
         if (dev_obj->constant.address == dev_addr) {
             found_dev_obj = dev_obj;
             goto exit;
@@ -783,7 +783,7 @@ esp_err_t usbh_ep_alloc(usb_device_handle_t dev_hdl, usbh_ep_config_t *ep_config
     if (is_in && dev_obj->mux_protected.ep_in[addr - 1] == NULL) {  //Is an IN EP
         dev_obj->mux_protected.ep_in[addr - 1] = pipe_hdl;
         assigned = true;
-    } else if (dev_obj->mux_protected.ep_out[addr - 1] == NULL) {   //Is an OUT EP
+    } else if (!is_in && dev_obj->mux_protected.ep_out[addr - 1] == NULL) {   //Is an OUT EP
         dev_obj->mux_protected.ep_out[addr - 1] = pipe_hdl;
         assigned = true;
     }