Crashes with Interchange runtime Import 5.4 and 5.5

I have a runtime Import of .glb files (glTF) that is working on UE 5.4, but not in UE 5.5.

I have several Issues but it seesm to be the same Problem in diffrent facettes.

In BeginPlay i have a loop that imports .gltf files at runtime via interchange import scene:

It works in packaged build as well in 5_4. The Problem starts if i call the exact same node not at begin play, but instead from a TCP Event from a plugin. in 5.4 the whole engines freezes, and has to be killed.

I updated to UE 5.5 to see if it works there. But there works less then in 5_4 but there is the same crashlog for both cirumstances ( begin play or network start). Here ist the crahslog and screenshot of the trace:

Assertion failed: ++Queue(QueueIndex).RecursionGuard == 1 [File:D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp] [Line: 677]

UnrealEditor_Core!FNamedTaskThread::ProcessTasksUntilIdle() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:677]
UnrealEditor_InterchangeEngine!UInterchangePipelineBase::ExecuteExportPipeline() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:870]
UnrealEditor_InterchangeCore!FScopeCycleCounter::~FScopeCycleCounter'::2’::<lambda_1>::operator()() [D:\build++UE5\Sync\Engine\Source\Runtime\Interchange\Core\Private\InterchangeTaskSystem.cpp:210]
UnrealEditor_Core!FGenericPlatformProcess::ConditionalSleep() [D:\build++UE5\Sync\Engine\Source\Runtime\Core\Private\GenericPlatform\GenericPlatformProcess.cpp:412]
UnrealEditor_InterchangeCore!UE::Interchange::FInterchangeTaskSystem::WaitUntilTasksComplete() [D:\build++UE5\Sync\Engine\Source\Runtime\Interchange\Core\Private\InterchangeTaskSystem.cpp:214]
UnrealEditor_InterchangeEngine!UE::Interchange::FImportAsyncHelper::GetCompletionTaskGraphEvent() [D:\build++UE5\Sync\Engine\Source\Runtime\Interchange\Engine\Private\InterchangeManager.cpp:655]
UnrealEditor_InterchangeEngine!UE::Interchange::FImportResult::WaitUntilDone() [D:\build++UE5\Sync\Engine\Source\Runtime\Interchange\Engine\Private\InterchangeManager.cpp:824]

the problem can also be triggered by a simple delay note in front of the loop that starts the interchange Scene Imports.

Any suggestions to prevent this behaviour ? ( even if no delay not is in place)

Hi! Hitting the same issue with C++ code, replacing my FBXImporter with Interchange.

In my instance, I’m calling it from a Menu Item


Assertion failed: ++Queue(QueueIndex).RecursionGuard == 1 [File:D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp] [Line: 677] 



UnrealEditor_Core!FNamedTaskThread::ProcessTasksUntilIdle() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:677]
UnrealEditor_InterchangeEngine!UInterchangePipelineBase::ExecuteExportPipeline() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:870]
UnrealEditor_InterchangeCore!`FScopeCycleCounter::~FScopeCycleCounter'::`2'::<lambda_1>::operator()() [D:\build\++UE5\Sync\Engine\Source\Runtime\Interchange\Core\Private\InterchangeTaskSystem.cpp:210]
UnrealEditor_Core!FGenericPlatformProcess::ConditionalSleep() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\GenericPlatform\GenericPlatformProcess.cpp:412]
UnrealEditor_InterchangeCore!UE::Interchange::FInterchangeTaskSystem::WaitUntilTasksComplete() [D:\build\++UE5\Sync\Engine\Source\Runtime\Interchange\Core\Private\InterchangeTaskSystem.cpp:214]
UnrealEditor_InterchangeEngine!UE::Interchange::FImportAsyncHelper::GetCompletionTaskGraphEvent() [D:\build\++UE5\Sync\Engine\Source\Runtime\Interchange\Engine\Private\InterchangeManager.cpp:655]
UnrealEditor_InterchangeEngine!UE::Interchange::FImportResult::WaitUntilDone() [D:\build\++UE5\Sync\Engine\Source\Runtime\Interchange\Engine\Private\InterchangeManager.cpp:824]
UnrealEditor_InterchangeEngine!UInterchangeManager::ImportAsset() [D:\build\++UE5\Sync\Engine\Source\Runtime\Interchange\Engine\Private\InterchangeManager.cpp:1637]
UnrealEditor_DesignLife_Editor!DirectoryImporter::ImportFBXInterchange() [C:\Projects\NewCo\DesignLife_Unreal 5.5\Source\DesignLife_Editor\Private\DirectoryImporter.cpp:59]
UnrealEditor_DesignLife_Editor!DirectoryImporter::ImportFile() [C:\Projects\NewCo\DesignLife_Unreal 5.5\Source\DesignLife_Editor\Private\DirectoryImporter.cpp:307]
UnrealEditor_DesignLife_Editor!UE::Core::Private::Function::TFunctionRefCaller<`ProcessDirectory'::`2'::<lambda_1>,bool,wchar_t const *,bool>::Call() [C:\Program Files\Epic Games\UE_5.5\Engine\Source\Runtime\Core\Public\Templates\Function.h:319]
UnrealEditor_Core!FDirectoryVisitorFuncWrapper::Visit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\GenericPlatform\GenericPlatformFile.cpp:598]
UnrealEditor_Core!IPlatformFile::FDirectoryVisitor::CallShouldVisitAndVisit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\GenericPlatform\GenericPlatformFile.cpp:574]
UnrealEditor_Core!`IPlatformFile::IterateDirectoryRecursively'::`2'::FRecurse::Visit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\GenericPlatform\GenericPlatformFile.cpp:642]
UnrealEditor_Core!IPlatformFile::FDirectoryVisitor::CallShouldVisitAndVisit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\GenericPlatform\GenericPlatformFile.cpp:574]
UnrealEditor_Core!FWindowsPlatformFile::IterateDirectoryCommon() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsPlatformFile.cpp:1673]
UnrealEditor_Core!FWindowsPlatformFile::IterateDirectory() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsPlatformFile.cpp:1617]
UnrealEditor_Core!ParallelForImpl::ParallelForInternal<`IPlatformFile::IterateDirectoryRecursively'::`4'::<lambda_1>,`ParallelForWithTaskContext<TArray<FString,TSizedDefaultAllocator<32> >,TSizedDefaultAllocator<32>,`IPlatformFile::IterateDirectoryRecursivel() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\ParallelFor.h:145]
UnrealEditor_Core!IPlatformFile::IterateDirectoryRecursively() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\GenericPlatform\GenericPlatformFile.cpp:674]
UnrealEditor_Core!IPlatformFile::IterateDirectoryRecursively() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\GenericPlatform\GenericPlatformFile.cpp:713]
UnrealEditor_Core!FFileManagerGeneric::IterateDirectoryRecursively() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\HAL\FileManagerGeneric.cpp:518]
UnrealEditor_DesignLife_Editor!ProcessDirectory() [C:\Projects\NewCo\DesignLife_Unreal 5.5\Source\DesignLife_Editor\Private\DownloadAndImportModels.cpp:110]
UnrealEditor_DesignLife_Editor!UDownloadAndImportModels::DownloadModel() [C:\Projects\NewCo\DesignLife_Unreal 5.5\Source\DesignLife_Editor\Private\DownloadAndImportModels.cpp:169]
UnrealEditor_DesignLife_Editor!UDownloadAndImportModels::ExecuteDownloads() [C:\Projects\NewCo\DesignLife_Unreal 5.5\Source\DesignLife_Editor\Private\DownloadAndImportModels.cpp:81]
UnrealEditor_DesignLife_Editor!UAirtableSubsystem::OnCacheLoaded() [C:\Projects\NewCo\DesignLife_Unreal 5.5\Source\DesignLife_Editor\Private\AirtableSubsystem.cpp:68]
UnrealEditor_DesignLife_Editor!AirtableBulkCache::TickUp() [C:\Projects\NewCo\DesignLife_Unreal 5.5\Source\DesignLife_Editor\Private\AirtableBulkCache.cpp:177]
UnrealEditor_DesignLife_Editor!std::_Func_impl_no_alloc<`AirtableBulkCache::CreateSafeTickUp<FSkus>'::`2'::<lambda_1>,void>::_Do_call() [C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Tools\MSVC\14.40.33521\INCLUDE\functional:909]
UnrealEditor_DesignLife_Editor!``FetchTable<FSkus>'::`2'::<lambda_1>::operator()'::`36'::<lambda_1>::operator()() [C:\Projects\NewCo\DesignLife_Unreal 5.5\Source\DesignLife_Editor\Private\AirtableBulkCache.cpp:151]
UnrealEditor_Core!TGraphTask<FAsyncGraphTask>::ExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Async\TaskGraphInterfaces.h:634]
UnrealEditor_Core!UE::Tasks::Private::FTaskBase::TryExecuteTask() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Tasks\TaskPrivate.h:504]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksNamedThread() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:779]
UnrealEditor_Core!FNamedTaskThread::ProcessTasksUntilQuit() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Async\TaskGraph.cpp:668]
UnrealEditor_Core!UE::Tasks::Private::TryWaitOnNamedThread() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Tasks\TaskPrivate.cpp:338]
UnrealEditor_Core!UE::Tasks::Private::FTaskBase::WaitWithNamedThreadsSupport() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Tasks\TaskPrivate.cpp:238]
UnrealEditor_MassEntityEditor!UMassEntityEditorSubsystem::Tick() [D:\build\++UE5\Sync\Engine\Source\Editor\MassEntityEditor\Private\MassEntityEditorSubsystem.cpp:173]
UnrealEditor_UnrealEd!UE::Core::Private::Function::TFunctionRefCaller<`FTickableEditorObject::TickObjects'::`2'::<lambda_1>,void,FTickableObjectBase * __ptr64>::Call() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Templates\Function.h:315]
UnrealEditor_Engine!FTickableObjectBase::SimpleTickObjects() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\Tickable.cpp:112]
UnrealEditor_UnrealEd!UEditorEngine::Tick() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\EditorEngine.cpp:1898]
UnrealEditor_UnrealEd!UUnrealEdEngine::Tick() [D:\build\++UE5\Sync\Engine\Source\Editor\UnrealEd\Private\UnrealEdEngine.cpp:550]
UnrealEditor!FEngineLoop::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5869]
UnrealEditor!GuardedMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:188]
UnrealEditor!GuardedMainWrapper() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:123]
UnrealEditor!LaunchWindowsStartup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:277]
UnrealEditor!WinMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:317]
UnrealEditor!__scrt_common_main_seh() [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll
void DirectoryImporter::ImportFBXInterchange(const FString& FilePath, const FString& PackagePath)
{
	FString PackageName = GetUniquePackageName(FilePath, PackagePath, TEXT("S_"));
	if (FPackageName::DoesPackageExist(PackageName))
	{
		UE_LOG(LogTemp, Warning, TEXT("The model '%s' already exists as an asset in Unreal."), *FilePath);
		return;
	}
	
	UInterchangeManager& InterchangeManager = UInterchangeManager::GetInterchangeManager();
	UInterchangeSourceData* SourceData = NewObject<UInterchangeSourceData>();
	SourceData->SetFilename(FilePath);

	FImportAssetParameters ImportParameters;
	ImportParameters.bIsAutomated = true;
	ImportParameters.bRunSynchronous = true;

    TArray<UObject*> ImportedAssets;
    bool bImportStarted = InterchangeManager.ImportAsset(
        PackagePath,
        SourceData,
        ImportParameters,
        ImportedAssets
    );

    if (!bImportStarted)
    {
        UE_LOG(LogDirectoryImporter, Warning, TEXT("Failed to start import for '%s'"), *FilePath);
        return;
    }

    if (ImportedAssets.Num() > 0)
    {
        for (UObject* ImportedObject : ImportedAssets)
        {
            if (UStaticMesh* StaticMesh = Cast<UStaticMesh>(ImportedObject))
            {
                // Enable Nanite (if supported) and tweak build settings
                FStaticMeshSourceModel& SourceModel = StaticMesh->GetSourceModel(0);
                FMeshBuildSettings& BuildSettings = SourceModel.BuildSettings;
                BuildSettings.bUseMikkTSpace = true;
                BuildSettings.bComputeWeightedNormals = true;
                BuildSettings.bRecomputeNormals = true;
                BuildSettings.bRecomputeTangents = true;

                // Apply and save changes
                StaticMesh->Build();
                StaticMesh->PostEditChange();
            }
        }

        UE_LOG(LogDirectoryImporter, Log, TEXT("Successfully imported FBX: '%s'"), *FilePath);
    }
    else
    {
        UE_LOG(LogDirectoryImporter, Warning, TEXT("No assets were imported for '%s'"), *FilePath);
    }

}```