diff --git a/libraries/procedural/src/procedural/Procedural.cpp b/libraries/procedural/src/procedural/Procedural.cpp index 071b07b48a..d3aed38198 100644 --- a/libraries/procedural/src/procedural/Procedural.cpp +++ b/libraries/procedural/src/procedural/Procedural.cpp @@ -77,6 +77,9 @@ void Procedural::parse(const QString& userDataJson) { // This will be called by Procedural::ready std::lock_guard lock(_proceduralDataMutex); _proceduralData = proceduralData.toObject(); + + // Mark as dirty after modifying _proceduralData, but before releasing lock + // to avoid setting it after parsing has begun _proceduralDataDirty = true; } @@ -166,9 +169,13 @@ void Procedural::parse(const QJsonObject& proceduralData) { bool Procedural::ready() { // Load any changes to the procedural + // Check for changes atomically, in case they are currently being made if (_proceduralDataDirty) { std::lock_guard lock(_proceduralDataMutex); parse(_proceduralData); + + // Reset dirty flag after reading _proceduralData, but before releasing lock + // to avoid resetting it after more data is set _proceduralDataDirty = false; }