summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Belt <andrewpbelt@gmail.com>2024-04-10 21:41:29 -0400
committerAndrew Belt <andrewpbelt@gmail.com>2024-04-10 21:41:29 -0400
commitfc64b13fe831739a7d16215f0843e7d02f0bac2b (patch)
tree8cfe8b92e20ca065a05413222c96556707b779f2
parente706ba2e3f30e92460c283cdf37449e86a4751f5 (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.cpp6
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);