APVTS and state properties

I’m having an issue which seems random and not reproducible. I think I have the general direction but I’d like to know if this makes any sense at all or am I barking at the wrong tree here.

tl;dr: is it safe to use apvts.state properties in real time like an AudioProcessorParameter sub tree?


my plugin has a welcome page and a dsp page, and I want to keep the selected page in the plugin state so I call apvts.state.setProperty(“selectedPage”,”dsp”,nullptr) or apvts.state.setProperty(“selectedPage”,”main”,nullptr) whenever a page button is clicked.

To make the plugin respond to the click as well as showing the correct page when a preset is loaded, I have a Value object in the main component which itself is a ValueTree::Listener, listening to apvts.state. So whenever valueTreeRedirected is triggered I set value.referTo(apvts.state.GetPropertyAsValue(“selectedPage”). The main component is also a Value::Listener so whenever “selectedPage” is changed during a session or loading a preset, the page is switched to the value stored in “selectedPage”. Wonderfull.

Every once in a while I get a EXC_BAD_ACCESS crash either in ValueTree::SetProperty regarding “selectedPage” property, or it might appear in AudioProcessorValueTreeState:: flushParameterValuesToValueTree(), referring me to some audio parameter I recently touched.

So obviously this is a threading violation. Should I take from this that I am not supposed to change apvts.state properties directly?

This is me answering my own question:
Why do you touch apvts.state property directly from a GUI class if you have a local Value object which is a reference to that property?
Use myValue="dsp" instead of apvts.state.setProperty(“selectedPage”,”dsp”,nullptr)