From 1a8cca3dcca0f4e59b5d25429b9b9a03962b1c30 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Tue, 15 Mar 2016 10:51:55 -0700 Subject: [PATCH] Clarify use of procedural's dirty atomic flag --- libraries/procedural/src/procedural/Procedural.cpp | 7 +++++++ 1 file changed, 7 insertions(+) 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; }