-
Notifications
You must be signed in to change notification settings - Fork 78
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dorico's VSTAudioEngine hangs in config watcher cleanup #208
Comments
Your stack trace suggests the FlexASIO config file watcher thread got stuck, preventing FlexASIO's ASIODisposeBuffers() implementation from cleaning up the watcher. I don't think I've seen this before. Can you provide a log?
This has nothing to do with buffer sizes. |
Many thanks for the quick response. The customer is currently on a deadline and therefore pretty stressed. I can ask for a log, but don't know when he can deliver. |
A log would definitely provide a lot more information to help troubleshoot this - it would show the exact timeline of both the main thread and the config watcher thread. It would also help determine if the joining is the true root cause or if we're dealing with broader undefined behavior/corruption (e.g. use after free on Another piece of information that may be useful, and that you may be able to recover from your dump, is if you can see any thread that is running |
I've asked for a log but have to wait.... And in regards to Watcher::RunThread() or any other flexasio:: thread, no, I can't find it in any of the running threads. |
I received a log file from the customer and attached here. I hope you can make something out of it. Thanks |
I was unable to find a smoking gun in there I'm afraid. The host application recreates buffers 16 times. Every time the config watcher thread is joined and then recreated successfully, except for the 16th time for some reason:
The log shows the config watcher thread is correctly notified and it does return from its thread proc (consistent with your finding that the thread is not there), but somehow My bet is on some kind of undefined behavior/corruption happening at some point earlier in the lifetime of the process that corrupts thread state somehow and breaks At this point I'm not optimistic that we will be able to get to the bottom of this without the ability to attach a debugger and step through the However… While pondering over that code I think I may have found an actual undefined behavior bug: when the watcher is torn down, it does not cancel the |
Hi Etienne, thanks for looking into the issue. No pressure, take your time and do as you can. Our customer mentioned that he wants to migrate to Mac sooner or later any way, so even if you maybe don't fix it for this customer, some other customer will surely benefit from it in the future. |
FlexASIO 1.10 addresses #209, the suspected root cause of the crash. Please try again with 1.10 and feel free to reopen if you are still experiencing this issue. |
Hi Etienne, thanks so much for addressing this issue. For the next weeks I'm too busy to try out the fix version, but really thank you for finally tackling that bug. :-) |
We have a Dorico customer who uses FlexASIO in the VSTAudioEngine, and with him the audio engine frequently freezes in, because FlexASIO hangs in the main thread and somehow waits for some other thread to join.
The callstack looks like this then:
Can this somehow be avoided? Would increasing the buffer size maybe help?
User has the latest 1.9 FlexASIO
Dorico 5 AudioEngine 5.6.20 64bit 2024.1.11 16.48.52.446-freezedump.dmp
The text was updated successfully, but these errors were encountered: