macOS: Crash with Airwindows VST when changing presets

Hello!

Renoise freezes when changing instruments if the tab with plugin controls is open at the bottom.

https://www.airwindows.com

OSX 13.6.6

Please also report this to the AirWindows developers. It’s the plugin that’s crashing here, so there’s not much we can do on our end.

It only crashes when the editor is expanded, because Renoise fetches string values for the parameters while the program is changing.

1 Like

Info:
I tried reproducing the error in Windows 10 + Renoise 3.4.3 + Airwindows VST3 and nothing happened. Might be a Mac only problem.

Did you open the parameters page in the dsp lane? Crashes here, too, macos 12.6.1. Actually it freezes Renoise.

Hmm we are fine in logic, bitwig, reaper, live, ardour. And the code has some pretty solid thread protection around the get text methods and is just juce parameters. Doesn’t mean it’s right though.

How can I get a renoise NFR to try and replicate?

Thanks

1 Like

I think the “demo” is like the full version, minus rendering minus asio plus nag screen. Thanks for your efforts, really like the idea of putting all airwindows plugins together.

hmm well yeah i can definitely make it deadlock when i show params with the window open.

something in the calling order must be wrong. I wonder what. obviously our test daws didn’t exhibit this problem.

1 Like

Maybe just swap order of “reconfiguring vst parameters” vs. “actually switching plugin”? Couldn’t even find that place in the code :sweat_smile:

nah its a bit more tricky than that because of the underlyer.

I think i am getting a deadlock because i’m doing too much on the audio thread. Debugging now.

2 Likes

OK I’ve figured out the problem, it is a renoise bug-like-behaviour or perhaps-bug but these plugin specs (except clap) are pretty hard to follow (oh and hey: how about CLAP support in renoise! :slight_smile: ).

But I think it is a renoise behavior I can work around.

Basically the problem is that renoise is re-entering me when I call setValueNotifyingHost on a parameter. in all other daws that is async. You set and notify and after you return the host calls you back for a value. Renoise calls you back before you return. In other words

  param::getText() { print "hey"; }

   param->setValueNotifyingHost()
   print "fun";

even other daw will print fun before hey. Renoise will re-enter in the notification cycle.

For me, since i have a bit of threading complexity involving multiple instances, this means my non-recursive mutex deadlocks.

That’s not a problem. I can move the stuff outside a lock and will work on that now, but it does make renoise considerably different form every other daw. So if any renoise devs read this, wanted to share what tripped me up.

2 Likes

Yeah alright my workaround works in renoise, but renoise also seems to have a bug that the notification of parameter change doesn’t update the ui for parameter names.

Let me run around the other daws quickly to test but should be able to get a workaround in today or tomorrow.

2 Likes

Hey, Paul, nice to have you here! I know you from the Surge discord, your insights here are extremely helpful! I hope for an exchange between you and taktik :slight_smile:

2 Likes

Fixed here, macos 12.6.1.

Per @baconpaul

“if you download again the deadlock is gone. There’s still the renoise bug where you don’t listen to Param name changes. I would be happy to discuss that but the forum won’t let me post a fourth message in a thread because I’m new”

3 Likes

Fixed in 3 hours, nice :grin:

1 Like

Hey @baconpaul

Thanks for checking.

Yes, we’re querying the string representation of the parameter here.

Will check that. Which notification (VST3 function from the host) do you fire here?

Re NFR: Sure thing. Please contact me via taktik @“nameofthissoftware”.com for the NFR or write me a forum PM here.

Thank you very much for your work!
I don’t know how to correctly writing in this forum about bugs, but I found new bug :upside_down_face: , after re-opened project, plugin have reset settings

Gotcha well I’m not sure if you are wrong with that re entrant call but you are unique. But I’ve worked around it. One to remember for other devs

As to the update call here’s what juce is doing. Basically calling restsrt with the appropriate flags

Thanks for NFR offer. Will drop mail today

1 Like

Thanks. Will be fixed here.

1 Like

Oh and there’s an AU ewuivalent in the AU wrapper in same repo of course. Bit harder to dig through but at the end of the day it calls

            if ((flags & parameterInfoChangedFlag) != 0)
            {
                owner.PropertyChanged (kAudioUnitProperty_ParameterList, kAudioUnitScope_Global, 0);
                owner.PropertyChanged (kAudioUnitProperty_ParameterInfo, kAudioUnitScope_Global, 0);
            }

Let me know if you need any other pointers or help!