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 来描述这个问题。
我的代码使用 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 来描述这个问题。