如果我在WinUSB_ReadPipe()启动时调用WinUSB_AbortPipe(),则会进入死锁状态。我运行了here提供的调试跟踪日志。下面是日志中出现问题的最后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端点异步读入缓冲区。我发现最好将读取操作的超时设置为无限,因为当我导致STALL发生时,驱动程序会讨厌它(遇到其他问题)。所以我需要断开连接序列导致线程唤醒以实现我们需要关闭。有没有办法安全地做到这一点?
答案 0 :(得分:0)
我的解决方法是改为调用WinUsb_ResetPipe()。这导致WinUSB_ReadPipe()解除阻塞,并且似乎没有像WinUSB_AbortPipe()那样锁定。我所知道的唯一证据就是成功运行了几个小时的测试,所以我无法保证这是一个解决方案。