Guard against parameter updates from audio thread in Model Objects whilst processing

nix
Owen Green 5 years ago
parent abef788a39
commit 5956e97925

@ -950,17 +950,22 @@ namespace impl {
void next(int)
{
Wrapper::getInterfaceTable()->fClearUnitOutputs(this, mNumOutputs);
index id = static_cast<index>(in0(1));
if(mID != id) init();
if(!mInit) return;
if(mSpinlock.tryLock())
{
if(auto ptr = mInst.lock())
{
auto& client = ptr->mClient;
auto& params = ptr->mParams;
mControls.reset(mInBuf + ControlOffset());
mDelegate.next(*this,client,params,mControls);
mDelegate.next(*this,client,params,mControls, ptr.use_count() == 2);
}else printNotFound(id);
mSpinlock.unlock();
}
}
private:

@ -122,14 +122,17 @@ namespace impl{
}
}
void next(SCUnit& unit, Client& client,Params& params,FloatControlsIter& controls)
void next(SCUnit& unit, Client& client,Params& params,FloatControlsIter& controls,bool updateParams = true)
{
bool trig = IsModel_t<Client>::value ? !mPrevTrig && unit.in0(0) > 0 : false;
mPrevTrig = trig;
if(updateParams)
{
Wrapper::setParams(&unit, params, controls);
params.constrainParameterValuesRT(nullptr);
}
for (index i = 0; i < client.audioChannelsIn(); ++i)
{

Loading…
Cancel
Save