Calling UPackage::SavePackage() causes fatal assert in StaticFindObjectFast()

When I wrote this over a year ago, it used to work fine…

If my uasset package already exists, I can open it, change data, and save it back out and no problems. But now, if the uasset package does NOT already exist, when I call SavePackage(), I get this fatal:

Fatal error: [File:D:\phx-stream\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp] [Line: 291]
Illegal call to StaticFindObjectFast() while serializing object data or garbage collecting!

I run an automation in editor in -GAME mode.

Looking at code for StaticFindObjectFast(), GIsSavingPackage is TRUE, so it immediately fails. It is trying to open Meta Data, which is null, so it wants to go look for it…

Callstack:

UE4Editor-CoreUObject.dll!StaticFindObjectFast(UClass * ObjectClass, UObject * ObjectPackage, FName ObjectName, bool ExactClass, bool AnyPackage, EObjectFlags ExclusiveFlags, EInternalObjectFlags ExclusiveInternalFlags) Line 291	C++
[Inline Frame] UE4Editor-CoreUObject.dll!FindObjectFast(UObject *) Line 1239	C++
UE4Editor-CoreUObject.dll!UPackage::GetMetaData() Line 139	C++
UE4Editor-CoreUObject.dll!TextNamespaceUtilImpl::FindOrAddPackageNamespace(UPackage * InPackage, const bool bCanAdd) Line 36	C++
UE4Editor-CoreUObject.dll!TextNamespaceUtil::GetPackageNamespace(const UPackage * InPackage) Line 95	C++
UE4Editor-CoreUObject.dll!FPropertyLocalizationDataGatherer::FPropertyLocalizationDataGatherer(TArray<FGatherableTextData,FDefaultAllocator> & InOutGatherableTextDataArray, const UPackage * const InPackage, EPropertyLocalizationGathererResultFlags & OutResultFlags) Line 20	C++
UE4Editor-CoreUObject.dll!UPackage::Save(UPackage * InOuter, UObject * Base, EObjectFlags TopLevelFlags, const wchar_t * Filename, FOutputDevice * Error, FLinkerLoad * Conform, bool bForceByteSwapping, bool bWarnOfLongFilename, unsigned int SaveFlags, const ITargetPlatform * TargetPlatform, const FDateTime & FinalTimeStamp, bool bSlowTask, FArchiveDiffMap * InOutDiffMap) Line 4555	C++
UE4Editor-CoreUObject.dll!UPackage::SavePackage(UPackage * InOuter, UObject * Base, EObjectFlags TopLevelFlags, const wchar_t * Filename, FOutputDevice * Error, FLinkerLoad * Conform, bool bForceByteSwapping, bool bWarnOfLongFilename, unsigned int SaveFlags, const ITargetPlatform * TargetPlatform, const FDateTime & FinalTimeStamp, bool bSlowTask) Line 6118	C++

UE4Editor-Phoenix.dll!NavMeshCacheManager::SavePathMatrix() Line 3211 C++
[Inline Frame] UE4Editor-Phoenix.dll!NavMeshCacheManager::GenerateNavMeshCache() Line 3722 C++
UE4Editor-Phoenix.dll!GenerateNavMeshCache::Update() Line 3793 C++
[Inline Frame] UE4Editor-Core.dll!IAutomationLatentCommand::InternalUpdate() Line 442 C++
UE4Editor-Core.dll!FAutomationTestFramework::ExecuteLatentCommands() Line 297 C++

Steve

It looks like I now need this:

UPackage::GetMetaData()

right after calling CreatePackage()

Steve