Loading font data asserts in FLinkerLoad::Serialize - Debug Editor

Hi,

I am working on a project using 4.10 from GitHub (largely unchanged). When I compile and run in the DebugEditor configuration specifying the -game argument. I get an assert in FLinkerLoad::Serialize as it tries to load font data for an otf font used for text displayed on the loading screen. Call stack below:

UE4Editor-CoreUObject-Win64-Debug.dll!FLinkerLoad::Serialize(void * V, __int64 Length) Line 4255 C++
UE4Editor-Core-Win64-Debug.dll!operator<<(FArchive & Ar, __int64 & Value) Line 294 C++
UE4Editor-Core-Win64-Debug.dll!operator<<(FArchive & Ar, FCompressedChunkInfo & Chunk) Line 263 C++
UE4Editor-Core-Win64-Debug.dll!FArchive::SerializeCompressed(void * V, __int64 Length, ECompressionFlags Flags, bool bTreatBufferAsFileReader) Line 338 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FUntypedBulkData::SerializeBulkData(FArchive & Ar, void * Data) Line 1168 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FUntypedBulkData::LoadDataIntoMemory(void * Dest) Line 1306 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FUntypedBulkData::MakeSureBulkDataIsLoaded() Line 1252 C++
UE4Editor-CoreUObject-Win64-Debug.dll!FUntypedBulkData::LockReadOnly() Line 507 C++
UE4Editor-SlateCore-Win64-Debug.dll!UFontBulkData::Lock(int & OutFontDataSizeBytes) Line 46 C++
UE4Editor-SlateCore-Win64-Debug.dll!FFreeTypeInterface::GetFontFace(const FFontData & InFontData) Line 783 C++
UE4Editor-SlateCore-Win64-Debug.dll!FFreeTypeInterface::GetRenderData(const FFontData & InFontData, const int InSize, wchar_t Char, FCharacterRenderData & OutRenderData, const float InScale) Line 386 C++
UE4Editor-SlateCore-Win64-Debug.dll!FFreeTypeInterface::GetMaxHeight(const FSlateFontInfo & InFontInfo, const float InScale) Line 346 C++
UE4Editor-SlateCore-Win64-Debug.dll!FSlateFontCache::GetMaxCharacterHeight(const FSlateFontInfo & InFontInfo, float FontScale) Line 1201 C++
UE4Editor-SlateCore-Win64-Debug.dll!FCharacterList::GetMaxHeight() Line 989 C++
UE4Editor-SlateCore-Win64-Debug.dll!FSlateFontMeasure::MeasureStringInternal(const FString & Text, int StartIndex, int EndIndex, const FSlateFontInfo & InFontInfo, bool IncludeKerningWithPrecedingChar, float FontScale, int StopAfterHorizontalOffset, FSlateFontMeasure::ELastCharacterIndexFormat CharIndexFormat, int & OutLastCharacterIndex) Line 137 C++
UE4Editor-SlateCore-Win64-Debug.dll!FSlateFontMeasure::Measure(const FString & Text, int StartIndex, int EndIndex, const FSlateFontInfo & InFontInfo, bool IncludeKerningWithPrecedingChar, float FontScale) Line 68 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateTextRun::Measure(int BeginIndex, int EndIndex, float Scale) Line 51 C++
UE4Editor-Slate-Win64-Debug.dll!FTextLayout::FRunModel::CreateBlock(const FTextLayout::FBlockDefinition & BlockDefine, float InScale) Line 1896 C++
UE4Editor-Slate-Win64-Debug.dll!FTextLayout::CreateLineViewBlocks(int LineModelIndex, const int StopIndex, const float WrappedLineWidth, int & OutRunIndex, int & OutRendererIndex, int & OutPreviousBlockEnd, TArray<TSharedRef<ILayoutBlock,0>,FDefaultAllocator> & OutSoftLine) Line 193 C++
UE4Editor-Slate-Win64-Debug.dll!FTextLayout::FlowLineLayout(const int LineModelIndex, const float WrappingDrawWidth, TArray<TSharedRef<ILayoutBlock,0>,FDefaultAllocator> & SoftLine) Line 371 C++
UE4Editor-Slate-Win64-Debug.dll!FTextLayout::FlowLayout() Line 325 C++
UE4Editor-Slate-Win64-Debug.dll!FTextLayout::UpdateLayout() Line 651 C++
UE4Editor-Slate-Win64-Debug.dll!FTextLayout::UpdateIfNeeded() Line 639 C++
UE4Editor-Slate-Win64-Debug.dll!FTextBlockLayout::ComputeDesiredSize(const FTextBlockLayout::FWidgetArgs & InWidgetArgs, const float InScale, const FTextBlockStyle & InTextStyle) Line 84 C++
UE4Editor-Slate-Win64-Debug.dll!STextBlock::ComputeDesiredSize(float LayoutScaleMultiplier) Line 192 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::CacheDesiredSize(float LayoutScaleMultiplier) Line 405 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 399 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-SlateCore-Win64-Debug.dll!SWidget::SlatePrepass(float LayoutScaleMultiplier) Line 394 C++
UE4Editor-Slate-Win64-Debug.dll!PrepassWindowAndChildren(TSharedRef<SWindow,0> WindowToPrepass) Line 1054 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::DrawPrepass(TSharedPtr<SWindow,0> DrawOnlyThisWindow) Line 1106 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::PrivateDrawWindows(TSharedPtr<SWindow,0> DrawOnlyThisWindow) Line 1143 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::DrawWindows() Line 927 C++
UE4Editor-Slate-Win64-Debug.dll!FSlateApplication::Tick() Line 1441 C++
UE4Editor-MoviePlayer-Win64-Debug.dll!FSlateLoadingSynchronizationMechanism::SlateThreadRunMainLoop() Line 132 C++
UE4Editor-MoviePlayer-Win64-Debug.dll!FSlateLoadingThreadTask::Run() Line 163 C++
UE4Editor-Core-Win64-Debug.dll!FRunnableThreadWin::Run() Line 72 C++
UE4Editor-Core-Win64-Debug.dll!FRunnableThreadWin::GuardedRun() Line 23 C++
UE4Editor-Core-Win64-Debug.dll!FRunnableThreadWin::_ThreadProc(void * pThis) Line 67 C++
[External Code]

I tried clearing my saved and DDC folders in case something had jsut corrupted (although feels unlikely since it is asserting about mismatching thread IDs).

I tried Development Editor which obviously didn’t assert in checkSlow but also seemed to have no notable issues when running - the font displayed correctly, no font related errors. I also tried a couple of different maps as my startup map. Running Debug Editor without -game and then loading my desired map through the editor everything runs fine. So it looks specifically like Debug Editor with the addition of -game is the issue.

I finally tried just commenting out the check in LinkerLoad.cpp ln 4255 and it runs fine, which is why I have posted in bugs although I am still fully expecting it is something stupid I have done.

Anyone else encountered this or have any thoughts on what may be causing it?

Thanks,

Hi barneywilliams,

I took a look at the issue that you reported today, but was unable to see the same results that you saw (I was using 4.10.4). Do you see these same results in a new project? Does this happen with only one specific font? If you were to use this font in a different level other than the loading screen, and set that level as your startup level, does the same result occur?

Hi barneywilliams,

We have not heard back from you for a while. Do you still need help with this issue? I will be marking this post as resolved for internal tracking purposes, but please feel free to add a comment with more information and reopen the post if you need any more help.

Hi ,

Sorry for not getting back sooner. I tracked this down as far as the use of this loading screen plugin.

I was then told by the person that added it the project that we were going to remove it. So I didn’t look into it much more. On that basis feel free to close this, I just wanted to give you what info I had and to briefly answer your questions:

I did manage to reproduce it in a test project then I did something that fixed it in the test project. Unfortunately it is not clear what that was. That fonts was being used without issue in other parts of the game and when I tried different levels at startup it was fine.

Thanks,

Thanks for the additional information. I am glad to hear that you were able to find a resolution for the issue. If you start to see this happening again, please feel free to let us know.