diff options
author | Andrew Belt <andrewpbelt@gmail.com> | 2024-04-10 21:41:29 -0400 |
---|---|---|
committer | Andrew Belt <andrewpbelt@gmail.com> | 2024-04-10 21:41:29 -0400 |
commit | fc64b13fe831739a7d16215f0843e7d02f0bac2b (patch) | |
tree | 8cfe8b92e20ca065a05413222c96556707b779f2 | |
parent | e706ba2e3f30e92460c283cdf37449e86a4751f5 (diff) |
Clear engine before instantiating modules and before locking in Engine::fromJson(). Fixes ParamHandles from being removed immediately after instantiated modules add them.
-rw-r--r-- | src/engine/Engine.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 68b1c09c..b01cbcf1 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -1215,7 +1215,11 @@ json_t* Engine::toJson() { void Engine::fromJson(json_t* rootJ) { + clear(); + // modules + // We can't instantiate modules before clearing because some modules add ParamHandles upon construction. + // We also can't lock while instantiating modules because they call addParamHandle() which locks. std::vector<Module*> modules; json_t* modulesJ = json_object_get(rootJ, "modules"); if (!modulesJ) @@ -1257,8 +1261,6 @@ void Engine::fromJson(json_t* rootJ) { std::lock_guard<SharedMutex> lock(internal->mutex); - clear_NoLock(); - // Add modules for (Module* module : modules) { addModule_NoLock(module); |