0

如果我在 WinUSB_ReadPipe() 启动时调用 WinUSB_AbortPipe(),我会进入死锁状态。我运行了此处提供的调试跟踪日志。以下是出现问题的日志中的最后 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 发生时驱动程序讨厌它(遇到其他问题)。所以我需要让断开序列导致线程唤醒以意识到我们需要关闭。有没有办法安全地做到这一点?

4

1 回答 1

0

我的解决方法是调用 WinUsb_ResetPipe()。这会导致 WinUSB_ReadPipe() 解除阻塞,并且似乎不会像 WinUSB_AbortPipe() 有时那样锁定。我拥有的唯一证据表明这是通过几个小时成功运行测试,所以我不能保证这是一个解决方案。

于 2015-06-10T16:44:36.407 回答