diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index f947f6707a..be8f577090 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -2553,11 +2553,13 @@ bool EntityTree::writeToMap(QVariantMap& entityDescription, OctreeElementPointer } entityDescription["DataVersion"] = _persistDataVersion; entityDescription["Id"] = _persistID; + scriptEngineMutex.lock(); RecurseOctreeToMapOperator theOperator(entityDescription, element, scriptEngine.get(), skipDefaultValues, skipThoseWithBadParents, _myAvatar); withReadLock([&] { recurseTreeWithOperator(&theOperator); }); + scriptEngineMutex.unlock(); return true; } @@ -2726,9 +2728,11 @@ bool EntityTree::readFromMap(QVariantMap& map, const bool isImport) { " mapped it to parentJointIndex " << entityMap["parentJointIndex"].toInt(); } + scriptEngineMutex.lock(); ScriptValue entityScriptValue = variantMapToScriptValue(entityMap, *scriptEngine); EntityItemProperties properties; EntityItemPropertiesFromScriptValueIgnoreReadOnly(entityScriptValue, properties); + scriptEngineMutex.unlock(); EntityItemID entityItemID; if (entityMap.contains("id")) { @@ -2877,10 +2881,12 @@ bool EntityTree::readFromMap(QVariantMap& map, const bool isImport) { } bool EntityTree::writeToJSON(QString& jsonString, const OctreeElementPointer& element) { + scriptEngineMutex.lock(); RecurseOctreeToJSONOperator theOperator(element, scriptEngine.get(), jsonString); withReadLock([&] { recurseTreeWithOperator(&theOperator); }); + scriptEngineMutex.unlock(); jsonString = theOperator.getJson(); return true; diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 5b7e5691c3..d5c3a74eb7 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -387,6 +387,7 @@ private: MovingEntitiesOperator& moveOperator, bool force, bool tellServer); // Script engine for writing entity tree data to and from JSON + std::mutex scriptEngineMutex; ScriptEnginePointer scriptEngine{ newScriptEngine() }; };