WinUSB_AbortPipe зависает
Если я вызываю WinUSB_AbortPipe(), как только запускается WinUSB_ReadPipe(), я попадаю в состояние тупика. Я запустил журнал трассировки отладки, который представлен здесь. Ниже приведены последние 5 строк в журнале, где возникает проблема. Я думаю, что ReadPipe, должно быть, пропустил сигнал, и AbortPipe ждет завершения ReadPipe.
[0]4E34.4B58::06/09/2015-15:42:12.528 - IOCTL_WINUSB_READ_PIPE
[0]4E34.4B58::06/09/2015-15:42:12.528 - PIPE129: (00000019) The read has been added to the raw io queue
[0]4E34.4B58::06/09/2015-15:42:12.528 - PIPE129: (00000019) The read is being handled
[2]4E34.4ECC::06/09/2015-15:42:12.529 - IOCTL_WINUSB_ABORT_PIPE
[2]4E34.4B58::06/09/2015-15:42:12.529 - PIPE129: (00000019) Reading 64 bytes from the device
В моем проекте конечные точки IN асинхронно считываются в буферы. Я обнаружил, что лучше всего установить время ожидания операции чтения на бесконечное, потому что драйвер ненавидит его, когда я вызываю STALLs (столкнулся с другими проблемами с этим). Поэтому мне нужно, чтобы последовательность разъединения заставляла потоки просыпаться, чтобы понять, что нам нужно закрыться. Есть ли способ безопасно сделать это?
1 ответ
Мой обходной путь для этого - вместо этого вызвать WinUsb_ResetPipe(). Это приводит к тому, что WinUSB_ReadPipe() разблокируется, и, похоже, не блокируется, как это иногда делает WinUSB_AbortPipe(). Единственное доказательство того, что это работает, - успешное выполнение тестов в течение нескольких часов, поэтому я не могу гарантировать, что это решение.