Skip to content

Commit fc7ff23

Browse files
committed
Plugins: Fixed some subtle initialisation order problems
1 parent a77735b commit fc7ff23

File tree

5 files changed

+31
-15
lines changed

5 files changed

+31
-15
lines changed

modules/tracktion_engine/model/automation/tracktion_AutomatableEditItem.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@ AutomatableEditItem::AutomatableEditItem (Edit& ed, const juce::ValueTree& v)
1616
elementState (v)
1717
{
1818
remapOnTempoChange.referTo (elementState, IDs::remapOnTempoChange, &edit.getUndoManager(), false);
19-
edit.automatableEditItemCache.addItem (*this);
19+
20+
if (itemID.isValid())
21+
edit.automatableEditItemCache.addItem (*this);
2022
}
2123

2224
AutomatableEditItem::~AutomatableEditItem()
2325
{
24-
edit.automatableEditItemCache.removeItem (*this);
26+
if (itemID.isValid())
27+
edit.automatableEditItemCache.removeItem (*this);
2528
}
2629

2730
//==============================================================================

modules/tracktion_engine/model/automation/tracktion_AutomatableParameter.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -653,19 +653,22 @@ struct AutomatableParameter::AutomationSourceList : private ValueTreeObjectList
653653

654654
if (! getUndoManager (parameter).isPerformingUndoRedo())
655655
removeInvalidAutomationCurveModifiers (parent, parameter);
656+
}
657+
658+
~AutomationSourceList() override
659+
{
660+
freeObjects();
661+
}
656662

663+
void initialise()
664+
{
657665
rebuildObjects();
658666
updateCachedSources();
659667

660668
if (isActive())
661669
parameter.curveSource->triggerAsyncIteratorUpdate();
662670
}
663671

664-
~AutomationSourceList() override
665-
{
666-
freeObjects();
667-
}
668-
669672
static bool hasAutomationSources (const juce::ValueTree& stateToCheck)
670673
{
671674
for (auto v : stateToCheck)
@@ -1055,6 +1058,10 @@ AutomatableParameter::ModifierAssignment::Ptr AutomatableParameter::addModifier
10551058
}
10561059
else if (auto macro = dynamic_cast<MacroParameter*> (&source))
10571060
{
1061+
// Can't assign a MacroParameter to itself
1062+
if (macro == this)
1063+
return {};
1064+
10581065
v = createValueTree (IDs::MACRO,
10591066
IDs::source, macro->paramID);
10601067
}
@@ -1508,7 +1515,10 @@ void AutomatableParameter::startRecordingStatus()
15081515
AutomatableParameter::AutomationSourceList& AutomatableParameter::getAutomationSourceList() const
15091516
{
15101517
if (! automationSourceList)
1518+
{
15111519
automationSourceList = std::make_unique<AutomationSourceList> (*this);
1520+
automationSourceList->initialise();
1521+
}
15121522

15131523
return *automationSourceList;
15141524
}

modules/tracktion_engine/model/edit/tracktion_Edit.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,9 @@ void Edit::initialise (const Options& options)
871871

872872
for (auto effect : getAllClipEffects (*this))
873873
effect->initialise();
874+
875+
for (auto p : getAllPlugins (*this, true))
876+
p->trackPropertiesChanged();
874877
});
875878

876879
cancelAnyPendingUpdates();

modules/tracktion_engine/model/tracks/tracktion_TrackUtils.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,8 @@ void TrackList::deleteObject (Track* t)
212212

213213
void TrackList::newObjectAdded (Track* t)
214214
{
215+
jassert (t != nullptr);
216+
215217
if (edit.isLoading())
216218
return;
217219

modules/tracktion_engine/plugins/external/tracktion_ExternalPlugin.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -951,15 +951,13 @@ void ExternalPlugin::doFullInitialisation()
951951

952952
void ExternalPlugin::trackPropertiesChanged()
953953
{
954-
juce::MessageManager::callAsync ([this, pluginRef = makeSafeRef (*this)]
955-
{
956-
if (pluginRef == nullptr)
957-
return;
954+
if (edit.isLoading())
955+
return;
958956

959-
if (auto t = getOwnerTrack(); t != nullptr)
960-
if (auto pi = getAudioPluginInstance())
961-
pi->updateTrackProperties ({ t->getName(), t->getColour() });
962-
});
957+
TRACKTION_ASSERT_MESSAGE_THREAD
958+
if (auto t = getOwnerTrack(); t != nullptr)
959+
if (auto pi = getAudioPluginInstance())
960+
pi->updateTrackProperties ({ t->getName(), t->getColour() });
963961
}
964962

965963
//==============================================================================

0 commit comments

Comments
 (0)