Address a vulnerability with WorldPSCPool on cleanup

Hey, Stu!

Thanks for the response. We started running into this assertion right after switching to 5.6, but unfortunately, don’t have an isolated repro case. Our setup runs like this:

  • Game starts in a “Hub” level.
  • Player picks an option to jump to a different level B, using GameplayStatic’s OpenLevel
  • Level B programmatically streams in a large number of sublevels (~25), each with its own VFX, geometry, etc.

This assertion will happen frequently (and not always) when running this flow and closing PIE, and never if we directly run B in PIE. I can see that, using the flow, the world we’re getting settings from on cleanup is the sublevel’s. Some will contain a PersistentLevel, and some won’t. While if we directly load and run level B, World is always B.

This could be the way we’re configuring or streaming the sublevels. Streaming is simply:

// where World is always the currently active world (B), regardless of flow

World->SpawnActor<ALevelInstance>(..)

Because the Cleanup calls expect that WorldSettings might not exist, I thought “maybe there is a curious optimization now in place” :slight_smile:

I haven’t encountered this on UNiagaraComponentPool::Cleanup, but will keep an eye on it.

Thank you!!

Dan.