Deadlock in class FSkinningSceneExtension : public ISceneExtension, public FTickableGameObject

A deadlock is created by the fact that a render thread object FSkinningSceneExtension permanently waits to lock the TickableObjectsCritical through FTickableObjectBase::FTickableStatics::SetTickTypeForTickableObject on destruction while we are executing a Tick on our FTickableGameObject on the gamethread.

I see that 5.6 might have fixed this by moving to the thread safe ticker -> https://github.com/EpicGames/UnrealEngine/blob/5.6/Engine/Source/Runtime/Renderer/Private/Nanite/NaniteSkinningSceneExtension.h

It’s not viable for us to migrate to 5.6 now, luckily we don’t use the Nanite Skinned Meshes so they way we are working around this is to add the following to DefaultEngine.ini, we’re leaving this post here for any other 5.5 users that might encounter this.

[ConsoleVariables]

r.Nanite.AllowSkinnedMeshes=0

Steps to Reproduce

  1. In a cooked, Windows, Development build (seems to show up more here).
  2. Ensure that FSkinningSceneExtension is enabled and active in your current UWorld.
  3. Create a separate UObject that derives from FTickableGameObject.
  4. Browse to a new map from wthin the tick of your new UObject load a new map.
  5. Observe that the game process locks up entirely.

Hi,

thanks for reporting this deadlock and the workaround. I have tried to reproduce the deadlock following the repro steps (before filing a bug report), but have not succeeded in replicating the issue so far. Would you be able to share a small code snippet?

Thanks,

Sam