This is very similar to [Content removed] - but we do believe it can also happen when not using incremental GC, just much less often. The culprit is that AsyncUpdateStreamingStateTask is started on a certain frame, but it waits on the next frame, where GC can also happen through-out. When ULevelStreaming::GetLevelStreamingStatus() gets called, the following call:
Will trigger with “Illegal call to StaticFindObjectFast() while garbage collecting!”.
We did notice this crash because we are using incremental GC on our project, and we intend to ship with it - but as I said, I don’t think incremental GC is the actual problem, but the fact that the task can bleed-out from the same frame.
We strongly recommend that you stop using the incremental reachability analysis and the incremental Gather. Those are highly experimental features that are not proven to be thread safe. The only use case that we have validated is with a single thread server.
The comment on AsyncUpdateStreamingStateTask is still valid and I’ll have the engine team review that part of the code.