Fix deadlock when hot-reloading scripts in Editor while Animation asset gets auto-saved

#3942
This commit is contained in:
Wojtek Figat
2026-03-24 17:45:06 +01:00
parent b54794255a
commit 99d3da467e
2 changed files with 22 additions and 5 deletions

View File

@@ -691,11 +691,7 @@ Asset::LoadResult Animation::load()
continue;
}
#if USE_EDITOR
if (!_registeredForScriptingReload)
{
_registeredForScriptingReload = true;
Level::ScriptsReloadStart.Bind<Animation, &Animation::OnScriptsReloadStart>(this);
}
_registerForScriptingReload = true;
#endif
}
}
@@ -733,6 +729,7 @@ void Animation::unload(bool isReloading)
{
ScopeWriteLock systemScope(Animations::SystemLocker);
#if USE_EDITOR
_registerForScriptingReload = false;
if (_registeredForScriptingReload)
{
_registeredForScriptingReload = false;
@@ -752,6 +749,22 @@ void Animation::unload(bool isReloading)
NestedAnims.Clear();
}
#if USE_EDITOR
void Animation::onLoaded_MainThread()
{
if (_registerForScriptingReload && !_registeredForScriptingReload)
{
_registeredForScriptingReload = true;
Level::ScriptsReloadStart.Bind<Animation, &Animation::OnScriptsReloadStart>(this);
}
_registerForScriptingReload = false;
BinaryAsset::onLoaded_MainThread();
}
#endif
AssetChunksFlag Animation::getChunksToPreload() const
{
return GET_CHUNK_FLAG(0);

View File

@@ -78,6 +78,7 @@ API_CLASS(NoSpawn) class FLAXENGINE_API Animation : public BinaryAsset
private:
#if USE_EDITOR
bool _registerForScriptingReload = false;
bool _registeredForScriptingReload = false;
void OnScriptsReloadStart();
#endif
@@ -163,5 +164,8 @@ protected:
// [BinaryAsset]
LoadResult load() override;
void unload(bool isReloading) override;
#if USE_EDITOR
void onLoaded_MainThread() override;
#endif
AssetChunksFlag getChunksToPreload() const override;
};