Add error log when adding/removign actors during rendering or when ConcurrentSystemLocker deadlocks

This commit is contained in:
Wojtek Figat
2025-07-15 12:34:40 +02:00
parent c882b547c8
commit 3e0c085bf3
3 changed files with 44 additions and 1 deletions

View File

@@ -7,9 +7,23 @@
#include "Engine/Graphics/RenderView.h"
#include "Engine/Renderer/RenderList.h"
#include "Engine/Threading/JobSystem.h"
#include "Engine/Threading/Threading.h"
#include "Engine/Profiler/ProfilerCPU.h"
#include "Engine/Profiler/ProfilerMemory.h"
#if !BUILD_RELEASE
#include "Engine/Graphics/GPUDevice.h"
#include "Engine/Core/Log.h"
#endif
#if BUILD_RELEASE
#define CHECK_SCENE_EDIT_ACCESS()
#else
#define CHECK_SCENE_EDIT_ACCESS() \
if (Locker.HasLock(false) && IsInMainThread() && GPUDevice::Instance && GPUDevice::Instance->IsRendering()) \
{ \
LOG(Error, "Adding/removing actors during rendering is not supported ({}, '{}').", a->ToString(), a->GetNamePath()); \
return; \
}
#endif
ISceneRenderingListener::~ISceneRenderingListener()
{
@@ -148,6 +162,7 @@ void SceneRendering::AddActor(Actor* a, int32& key)
if (key != -1)
return;
PROFILE_MEM(Graphics);
CHECK_SCENE_EDIT_ACCESS();
const int32 category = a->_drawCategory;
ConcurrentSystemLocker::WriteScope lock(Locker, true);
auto& list = Actors[category];
@@ -192,6 +207,7 @@ void SceneRendering::UpdateActor(Actor* a, int32& key, ISceneRenderingListener::
void SceneRendering::RemoveActor(Actor* a, int32& key)
{
CHECK_SCENE_EDIT_ACCESS();
const int32 category = a->_drawCategory;
ConcurrentSystemLocker::WriteScope lock(Locker, true);
auto& list = Actors[category];