From 3e7368b1cb31aedfa37d9cdae1d8612b08e99967 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 16 Oct 2023 16:36:52 +0200 Subject: [PATCH] Fix `HandleObjectDeserializationError` to be editor or dev only and thread-safe --- Source/Engine/Level/SceneObjectsFactory.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Source/Engine/Level/SceneObjectsFactory.cpp b/Source/Engine/Level/SceneObjectsFactory.cpp index 7f62d943b..ffaebb15c 100644 --- a/Source/Engine/Level/SceneObjectsFactory.cpp +++ b/Source/Engine/Level/SceneObjectsFactory.cpp @@ -14,6 +14,9 @@ #include "Engine/Serialization/JsonWriters.h" #include "Engine/Profiler/ProfilerCPU.h" #include "Engine/Threading/ThreadLocal.h" +#if !BUILD_RELEASE || USE_EDITOR +#include "Engine/Level/Level.h" +#endif SceneObjectsFactory::Context::Context(ISerializeModifier* modifier) : Modifier(modifier) @@ -254,6 +257,10 @@ void SceneObjectsFactory::Deserialize(Context& context, SceneObject* obj, ISeria void SceneObjectsFactory::HandleObjectDeserializationError(const ISerializable::DeserializeStream& value) { +#if !BUILD_RELEASE || USE_EDITOR + // Prevent race-conditions when logging missing objects (especially when adding dummy MissingScript) + ScopeLock lock(Level::ScenesLock); + // Print invalid object data contents rapidjson_flax::StringBuffer buffer; PrettyJsonWriter writer(buffer); @@ -280,6 +287,7 @@ void SceneObjectsFactory::HandleObjectDeserializationError(const ISerializable:: LOG(Warning, "Parent actor of the missing object: {0}", parent->GetName()); } } +#endif } Actor* SceneObjectsFactory::CreateActor(int32 typeId, const Guid& id)