Windows 10 上的 PortMidi 死锁

Deadlock in PortMidi on Windows 10

我的代码使用 PortMidi 已经好几年了。
我用它来编写可移植的 C++ 代码来控制 Mackie 类型的外部 MIDI Surface Control
我使用 PortMidi 最新版本:20101008

最近我们发现,当在 Windows10 上大量使用控件时,我们会遇到死锁。 这只发生在 Windows 10.

当处于死锁状态时,以下线程被卡住:

ntdll!ZwWaitForSingleObject
KERNELBASE!WaitForSingleObjectEx
wdmaud!CMIDIOutDevice::WriteEvent
wdmaud!CMIDIOutDevice::PlaySysEx
wdmaud!HwModMessage
wdmaud!dspsL
WINMMBASE!midiMessage
WINMMBASE!midiOutLongMsg
MIDICommunication!winmm_write_flush
MIDICommunication!Pm_WriteSysEx

使用调试器我发现代码正在等待事件(不是锁)。

有人知道 Windows10 and/or 上的 PortMidi 问题吗?

非常感谢,帕兹

4个月后...
在调试时我发现如果你使用这个问题也存在 Microsoft MIDI API 直接。
因此,我打开了与 Microsoft 的 Premier Support Call
经过长时间的调查(四个月),Microsoft 确认这是 Microsoft WinMM API 实现中的一个缺陷,"...没有正确处理 PNP 删除...".

我被告知将在 RS5 时间范围内发布对此的修复。


11 个月后...
作为处理我的 Premier Support Call 的一部分,Microsoft 发布了 public KB article 来描述这个问题。