When I run the commandlet I get errors like
LogUObjectLinker: Error: Detaching from existing linker /Game/__ExternalActors__/<project>/Levels/TestLevels/Design/<map>/A/0C/032E7EFPQF6G22YK6YGDNP while object WorldDataLayers /Game/<project>/Levels/TestLevels/Design/<map>.<map>:PersistentLevel.WorldDataLayers needs loading (Transactional | NeedLoad | NeedPostLoad | NeedPostLoadSubobjects | WasLoaded | HasExternalPackage). Setting linker to /Game/__ExternalActors__/<project>/Levels/TestLevels/Design/<map_folder>/4/FV/6Y7EY1GY89V3D810W6F99I. See log for more information.
then it crashes
Opening up and manually re-saving the umap works fine and doesn’t resolve the issue. I can make a packaged build with the umap as well.
Found some semi-related posts on UDN that implied it had to do with engine version changing and affecting widgets but doesn’t seem relevant here.
Do you have any advice on how to debug this issue?
Steps to Reproduce
100% repro on our project when running the following commandlet
D:\HORDE\<project>-IncrementalCook\Sync\Engine\Binaries\Win64\UnrealEditor-Cmd.exe "d:\HORDE\<project>-IncrementalCook\Sync\<project>\<project>.uproject" -run=ResavePackages -fixupredirects -autocheckout -SkipCheckedOutPackages -projectonly -unattended -p4 -SCCProvider=Perforce -P4Port=<p4server> -P4User=<p4user> -P4Client=<p4client> -abslog="d:\HORDE\<project>-IncrementalCook\Sync\Engine\Programs\AutomationTool\Saved\ResavePackages-2025.09.18-14.36.19.txt" -stdout -CrashForUAT -unattended -NoLogTimes -buildmachine
dcou
(Danny Couture)
September 22, 2025, 12:28pm
3
Hi Adam,
This generally happen when something is renaming a package during loading without the REN_ForceNoResetLoaders flag. Since the loader hasn’t finish loading the package, pulling the rug under the loader by renaming a package and detaching the linker will cause this kind of issues.
Can you confirm that this is what’s happening?
Thanks
Danny
dcou
(Danny Couture)
September 25, 2025, 1:14pm
4
Sorry Adam, after looking at the 5.6 code, the reset loader functionality doesn’t exist anymore so it’s definitely not involved.
The callstack we need is the callstack where this message is logged
LogUObjectLinker: Error: Detaching from existing linker /Game/__ExternalActors__/<project>/Levels/TestLevels/Design/<map>/A/0C/032E7EFPQF6G22YK6YGDNP while object WorldDataLayers /Game/<project>/Levels/TestLevels/Design/<map>.<map>:PersistentLevel.WorldDataLayers needs loading (Transactional | NeedLoad | NeedPostLoad | NeedPostLoadSubobjects | WasLoaded | HasExternalPackage). Setting linker to /Game/__ExternalActors__/<project>/Levels/TestLevels/Design/<map_folder>/4/FV/6Y7EY1GY89V3D810W6F99I. See log for more information.
Once we have that callstack, it should be easier to determine which team to involve.
Thanks
dcou
(Danny Couture)
September 25, 2025, 6:10pm
5
Hmmm I think I know what’s going on… can you try adding a call to FlushAsyncLoading() just before the GetPackageLinker() line inside
UResavePackagesCommandlet::LoadAndSaveOnePackage() function.
LoadAndSaveOnePackage does very shady stuff by calling GetPackageLinker and creating a linker itself while it should let the loader do it. That’s legacy code, but by making sure there is no pending async loads in the queue, it might help resolve this issue for you until we can clean this up.
Let me know if that helps
Thanks
dcou
(Danny Couture)
September 30, 2025, 11:49am
6
Sorry to hear that,
Is there any way you could share a sample project exhibiting the problem so we can debug it on our side?
Thanks
Danny
dcou
(Danny Couture)
October 2, 2025, 12:27pm
7
If you don’t mind debugging a little more, I’d be very curious to understand why the loader tries to overwrite a linker that already exists.
In particular, why is this code path in SetLinker not taken?
if (Existing.Linker == LinkerLoad && Existing.LinkerIndex == LinkerIndex)
{
// Nothing to do
return;
}
What files are referenced by both Linkers?
Any clues in (FAsyncPackage2*)Linker->AsyncRoot as to which package each linker is referring to?
Thanks
call stack for reference (unsure why but seems like it always gets omitted from my posts)
LogWindows: Error: appError called: Assertion failed: !Object->HasAnyFlags(RF_NeedLoad | RF_NeedInitialization) [File:D:\Horde\<project>-IncrementalCook\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading2.cpp] [Line: 10517]
Object='DataLayerInstanceWithAsset /Game/<project>/Levels/TestLevels/Design/<umap>.<umap>:PersistentLevel.WorldDataLayers.DataLayer_7460DC3041D771CF7127ABB79ECA5607' (000002308ED94D80), Flags=Transactional | NeedLoad | NeedPostLoad | NeedPostLoadSubobjects | WasLoaded, InternalFlags=0x04504000
LogWindows: Error: begin: stack for UAT
LogWindows: Error: === Critical error: ===
LogWindows: Error:
LogWindows: Error: Assertion failed: !Object->HasAnyFlags(RF_NeedLoad | RF_NeedInitialization) [File:D:\Horde\<project>-IncrementalCook\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading2.cpp] [Line: 10517]
LogWindows: Error: Object='DataLayerInstanceWithAsset /Game/<project>/Levels/TestLevels/Design/<umap>.<umap>:PersistentLevel.WorldDataLayers.DataLayer_7460DC3041D771CF7127ABB79ECA5607' (000002308ED94D80), Flags=Transactional | NeedLoad | NeedPostLoad | NeedPostLoadSubobjects | WasLoaded, InternalFlags=0x04504000
LogWindows: Error:
LogWindows: Error:
LogWindows: Error: [Callstack] 0x00007ffd20cb3258 UnrealEditor-Core.dll!FDebug::CheckVerifyFailedImpl2() []
LogWindows: Error: [Callstack] 0x00007ffd2c3c8836 UnrealEditor-CoreUObject.dll!FAsyncPackage2::MoveConstructedObjectsToPhase2() []
LogWindows: Error: [Callstack] 0x00007ffd2c3a9f24 UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::ConditionalBeginDeferredPostLoad() []
LogWindows: Error: [Callstack] 0x00007ffd2c3bca54 UnrealEditor-CoreUObject.dll!FAsyncPackage2::ExecutePostLoadLinkerLoadPackageExports() []
LogWindows: Error: [Callstack] 0x00007ffd2c3b9220 UnrealEditor-CoreUObject.dll!FAsyncPackage2::Event_PostLoadExportBundle() []
LogWindows: Error: [Callstack] 0x00007ffd2c3bb89e UnrealEditor-CoreUObject.dll!FEventLoadNode2::Execute() []
LogWindows: Error: [Callstack] 0x00007ffd2c3bcec8 UnrealEditor-CoreUObject.dll!FAsyncLoadEventQueue2::ExecuteSyncLoadEvents() []
LogWindows: Error: [Callstack] 0x00007ffd2c3cd677 UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::ProcessAsyncLoadingFromGameThread() []
LogWindows: Error: [Callstack] 0x00007ffd2c3dffb3 UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::TickAsyncLoadingFromGameThread() []
LogWindows: Error: [Callstack] 0x00007ffd2c3bfd93 UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::FlushLoading() []
LogWindows: Error: [Callstack] 0x00007ffd2bdf083f UnrealEditor-CoreUObject.dll!FlushAsyncLoading() []
LogWindows: Error: [Callstack] 0x00007ffd2bdf04cc UnrealEditor-CoreUObject.dll!FlushAsyncLoading() []
LogWindows: Error: [Callstack] 0x00007ffd2c30dd89 UnrealEditor-CoreUObject.dll!LoadPackageInternal() []
LogWindows: Error: [Callstack] 0x00007ffd2c30cf28 UnrealEditor-CoreUObject.dll!LoadPackage() []
LogWindows: Error: [Callstack] 0x00007ffd2c30d51e UnrealEditor-CoreUObject.dll!LoadPackage() []
LogWindows: Error: [Callstack] 0x00007ffd197ab014 UnrealEditor-UnrealEd.dll!UResavePackagesCommandlet::LoadAndSaveOnePackage() []
LogWindows: Error: [Callstack] 0x00007ffd197c1ad7 UnrealEditor-UnrealEd.dll!UResavePackagesCommandlet::Main() []
LogWindows: Error: [Callstack] 0x00007ff7e54d8fa0 UnrealEditor-Cmd.exe!FEngineLoop::PreInitPostStartupScreen() []
LogWindows: Error: [Callstack] 0x00007ff7e54ce39c UnrealEditor-Cmd.exe!GuardedMain() []
LogWindows: Error: [Callstack] 0x00007ff7e54ce6ba UnrealEditor-Cmd.exe!GuardedMainWrapper() []
LogWindows: Error: [Callstack] 0x00007ff7e54d209e UnrealEditor-Cmd.exe!LaunchWindowsStartup() []
LogWindows: Error: [Callstack] 0x00007ff7e54e4e44 UnrealEditor-Cmd.exe!WinMain() []
LogWindows: Error: [Callstack] 0x00007ff7e54e7466 UnrealEditor-Cmd.exe!__scrt_common_main_seh() []
LogWindows: Error: [Callstack] 0x00007ffdc1bbe8d7 KERNEL32.DLL!UnknownFunction []
LogWindows: Error:
LogWindows: Error: end: stack for UAT
Took 1,455.61s to run UnrealEditor-Cmd.exe, ExitCode=3
Hi Danny,
How would I verify this? My understanding is the commandlet should just be resaving them and there shouldn’t be any renaming involved
LogOutputDevice: Display: begin: stack for UAT
LogOutputDevice: Display: === FDebug::DumpStackTrace(): ===
LogOutputDevice: Display:
LogOutputDevice: Display: [Callstack] 0x00007ffd2c34a513 UnrealEditor-CoreUObject.dll!UObject::SetLinker() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c019546 UnrealEditor-CoreUObject.dll!FLinkerLoad::CreateExport() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c04782d UnrealEditor-CoreUObject.dll!FLinkerLoad::IndexToObject() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c018a9e UnrealEditor-CoreUObject.dll!FLinkerLoad::CreateExport() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c3ae6df UnrealEditor-CoreUObject.dll!FAsyncPackage2::CreateLinkerLoadExports() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c3b707a UnrealEditor-CoreUObject.dll!FAsyncPackage2::Event_CreateLinkerLoadExports() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c3bb89e UnrealEditor-CoreUObject.dll!FEventLoadNode2::Execute() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c3bcec8 UnrealEditor-CoreUObject.dll!FAsyncLoadEventQueue2::ExecuteSyncLoadEvents() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c3cd677 UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::ProcessAsyncLoadingFromGameThread() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c3dffb3 UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::TickAsyncLoadingFromGameThread() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c3bfd93 UnrealEditor-CoreUObject.dll!FAsyncLoadingThread2::FlushLoading() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2bdf083f UnrealEditor-CoreUObject.dll!FlushAsyncLoading() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2bdf04cc UnrealEditor-CoreUObject.dll!FlushAsyncLoading() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c30dd89 UnrealEditor-CoreUObject.dll!LoadPackageInternal() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c30cf28 UnrealEditor-CoreUObject.dll!LoadPackage() []
LogOutputDevice: Display: [Callstack] 0x00007ffd2c30d51e UnrealEditor-CoreUObject.dll!LoadPackage() []
LogOutputDevice: Display: [Callstack] 0x00007ffd197ab014 UnrealEditor-UnrealEd.dll!UResavePackagesCommandlet::LoadAndSaveOnePackage() []
LogOutputDevice: Display: [Callstack] 0x00007ffd197c1ad7 UnrealEditor-UnrealEd.dll!UResavePackagesCommandlet::Main() []
LogOutputDevice: Display: [Callstack] 0x00007ff7e54d8fa0 UnrealEditor-Cmd.exe!FEngineLoop::PreInitPostStartupScreen() []
LogOutputDevice: Display: [Callstack] 0x00007ff7e54ce39c UnrealEditor-Cmd.exe!GuardedMain() []
LogOutputDevice: Display: [Callstack] 0x00007ff7e54ce6ba UnrealEditor-Cmd.exe!GuardedMainWrapper() []
LogOutputDevice: Display: [Callstack] 0x00007ff7e54d209e UnrealEditor-Cmd.exe!LaunchWindowsStartup() []
LogOutputDevice: Display: [Callstack] 0x00007ff7e54e4e44 UnrealEditor-Cmd.exe!WinMain() []
LogOutputDevice: Display: [Callstack] 0x00007ff7e54e7466 UnrealEditor-Cmd.exe!__scrt_common_main_seh() []
LogOutputDevice: Display: [Callstack] 0x00007ffdc1bbe8d7 KERNEL32.DLL!UnknownFunction []
LogOutputDevice: Display: [Callstack] 0x00007ffdc3788d9c ntdll.dll!UnknownFunction []
LogOutputDevice: Display:
LogOutputDevice: Display: end: stack for UAT
Same crash
Changed `ContentCommandlets.cpp` -> `UResavePackagesCommandlet::LoadAndSaveOnePackage` from
VerboseMessage(TEXT("Pre GetPackageLinker"));
FLinkerLoad\* Linker \= GetPackageLinker(nullptr, PackagePath, LOAD\_NoVerify, nullptr);
to
VerboseMessage(TEXT("Pre GetPackageLinker"));
FlushAsyncLoading();
FLinkerLoad\* Linker \= GetPackageLinker(nullptr, PackagePath, LOAD\_NoVerify, nullptr);
It’s only happening on one of the 2 projects I’m working on it so it’s definitely project specific but I think trying to make a sample project to repro it would be a lot of work and not guaranteed to even repro it, are there any logs I can capture that might give insight or maybe stepping through call stack to look at vars etc