This is an automated email from Gerrit.

"Ivan <ivan.kryvosh...@infineon.com>" just uploaded a new patch set to Gerrit, 
which you can find at https://review.openocd.org/c/openocd/+/8876

-- gerrit

commit e6ad7d7ad58c47e86c0110429bed785230435141
Author: kryvosheiaivan <ivan.kryvosh...@infineon.com>
Date:   Wed May 28 16:52:42 2025 +0300

    Fix pending transfer
    
    Change-Id: I44621ac6096791714910220d04614d0a19ce47bd
    Signed-off-by: kryvosheiaivan <ivan.kryvosh...@infineon.com>

diff --git a/src/jtag/drivers/cmsis_dap_usb_bulk.c 
b/src/jtag/drivers/cmsis_dap_usb_bulk.c
index 8fbcb029dd..ca78cf9b8d 100644
--- a/src/jtag/drivers/cmsis_dap_usb_bulk.c
+++ b/src/jtag/drivers/cmsis_dap_usb_bulk.c
@@ -414,7 +414,20 @@ static int cmsis_dap_usb_open(struct cmsis_dap *dap, 
uint16_t vids[], uint16_t p
 static void cmsis_dap_usb_close(struct cmsis_dap *dap)
 {
        for (unsigned int i = 0; i < MAX_PENDING_REQUESTS; i++) {
-               libusb_free_transfer(dap->bdata->command_transfers[i].transfer);
+               if (dap->bdata->command_transfers[i].status == 
CMSIS_DAP_TRANSFER_PENDING) {
+                       LOG_DEBUG("busy command USB transfer at %u", 
dap->pending_fifo_put_idx);
+                       struct timeval tv = {
+                               .tv_sec = 1,
+                               .tv_usec = 1000
+                       };
+                       /* Complete pending commands */
+                       int res = 
libusb_handle_events_timeout_completed(dap->bdata->usb_ctx, &tv, NULL);
+                       if (res == 0) {
+                               
libusb_free_transfer(dap->bdata->command_transfers[i].transfer);
+                       }
+               } else {
+                       
libusb_free_transfer(dap->bdata->command_transfers[i].transfer);
+               }
                
libusb_free_transfer(dap->bdata->response_transfers[i].transfer);
        }
        cmsis_dap_usb_free(dap);

-- 

Reply via email to