Hi, I’ve come across an intermittent crash which relates to recent versions of the Steinberg built-in ASIO driver.
It is possible that this issue may be due to interpretation of the ASIO spec by JUCE as discussed in a post on the JUCE forum. I can’t post a direct link, but you can search for a post with the title “[BUG] ASIO driver crash when enumerating devices with insertDefaultDeviceNames”.
In short, when JUCE enumerates ASIO devices, it opens each device, creates dummy buffers, calls ASIOStop() and then Release() on the COM object. There is no call to ASIODisposeBuffers() or ASIOExit() before the Release().
This seems to have caused little concern for many users over many years, however on my system I’ve been having chronic issues while debugging the app I’m developing. The crashes occur in the built-in driver (ASIO Driver v1.0.9.26 x64) but not any of the other ASIO drivers I have installed (ASIO Fireface, Maschine MK3, Yamaha Steinberg USB ASIO).
Here are some stack traces for exceptions relating to asiobtin.dll during the JUCE enumeration. Fyi, DemoRunner is the JUCE demo app which I have used for the repro.
Exception thrown at 0x00007FF83F4AC801 (ntdll.dll) in DemoRunner.exe: 0xC0000005: Access violation reading location 0x0000000000000010.
> ntdll.dll!RtlpEnterCriticalSectionContended() Unknown
ntdll.dll!RtlEnterCriticalSection() Unknown
asiobtin.dll!00000001800081aa() Unknown
kernel32.dll!00007ff83e0be8d7() Unknown
ntdll.dll!RtlUserThreadStart() Unknown
Exception thrown at 0x0000000180008196 (asiobtin.dll) in DemoRunner.exe: 0xC0000005: Access violation reading location 0x0000000000000068.
> asiobtin.dll!0000000180008196() Unknown
kernel32.dll!00007ff83e0be8d7() Unknown
ntdll.dll!RtlUserThreadStart() Unknown
Exception thrown at 0x00007FF83F4AC801 (ntdll.dll) in DemoRunner.exe: 0xC0000005: Access violation reading location 0x0000000000000010.
> ntdll.dll!RtlpWaitOnCriticalSection() Unknown
ntdll.dll!RtlpEnterCriticalSectionContended() Unknown
ntdll.dll!RtlEnterCriticalSection() Unknown
asiobtin.dll!00000001800081aa() Unknown
kernel32.dll!00007ff83e0be8d7() Unknown
ntdll.dll!RtlUserThreadStart() Unknown
It would be great to have a Steinberg position on:
a) is it OK to call Release() without first calling ASIODisposeBuffers() or ASIOExit()?
b) does this expose an issue in the Release() method of the built-in driver? and if so, can this be addressed?