Ensure condition failed: !bHasLoaderImportFlag || GUObjectArray.IsDisregardForGC(Obj)

We are getting this issue on start of a development-config coked game target when loading a specific asset in a test project.

It doesn’t happen 100% of the time on all our cooks here, seems to be maybe 60%, but once it happens once, that specific cooked build will reproduce it 100% of the time.

This suggests the issue is at cook time.

I’ve shared a full heap crash dump with Martin Sevigny @ Epic.

This issue is similar in nature to this: Unreal Engine Issues and Bug Tracker (UE\-148551)

Which seems to have been closed without a repro?

The issue seems specific to a particular asset, a string table, resaving it causes no difference.

Any help is appreciated!

Thanks,

Daniele

[Attachment Removed]

The dump is missing some values that would help understand the situation. Do you have a log that goes with this? The message should contain the Flag\InternalFlags information so we can understand what condition is being the cause of the ensure.

[Attachment Removed]

More findings on our end, actually the issue is 100%… it just so happen that on some builds the ensure is caught by other systems that don’t fail our test automation… which is a separate issue.

So, the issue may be fully runtime, unrelated to the specific cooked build.

[Attachment Removed]

The callstack that is setting this is on the object in question is:

FAsyncPackage2::CreateLinkerLoadExports(FAsyncLoadingThreadState2 & ThreadState) Line 7424	C++
FAsyncPackage2::Event_CreateLinkerLoadExports(FAsyncLoadingThreadState2 & ThreadState, FAsyncPackage2 * Package, int __formal) Line 7596	C++
FEventLoadNode2::Execute(FAsyncLoadingThreadState2 & ThreadState) Line 5979	C++
FAsyncLoadEventQueue2::PopAndExecute(FAsyncLoadingThreadState2 & ThreadState) Line 6132	C++
FAsyncLoadingThread2::ProcessAsyncLoadingFromGameThread(FAsyncLoadingThreadState2 & ThreadState, bool & bDidSomething) Line 9864	C++
FAsyncLoadingThread2::TickAsyncThreadFromGameThread(FAsyncLoadingThreadState2 & ThreadState, bool & bDidSomething) Line 10587	C++
FAsyncLoadingThread2::TickAsyncLoadingFromGameThread(FAsyncLoadingThreadState2 & ThreadState, bool bUseTimeLimit, bool bUseFullTimeLimit, double TimeLimit, TArrayView<int const ,int> FlushRequestIDs, bool & bDidSomething) Line 10203	C++
FAsyncLoadingThread2::FlushLoading(TArrayView<int const ,int> RequestIDs) Line 11914	C++
FlushAsyncLoading(TArrayView<int const ,int> RequestIds) Line 356	C++
FlushAsyncLoading(int) Line 317	C++

It is never cleared after that until the ensure fires.

[Attachment Removed]

Hello!

Can you try CL#49901405? The team found that the disregard for GC could be closed while assets were still being streamed in.

Martin

[Attachment Removed]

Provided via private channel.

[Attachment Removed]

This seems to have worked great, thanks Martin and team!

Daniele

[Attachment Removed]