Hi,
Our problem is simple enough: We’ve updated to 4.16, and we can’t load our main (and big) levels that contains a lot of sub-levels for streaming (it crashes instantly at 0%), but we can load every single sub-level separately without problem. It worked fine in 4.15.
Just to make sure we understand each other, here’s what we call a sub-level:
We’ve played around with the problem, and the error seems to be happening when we try to load a level with 30-ish sub-levels, but I don’t think it’s related to the number of sub-levels, since we created a test project and added 128 empty sub-levels and everything worked fine. Basically I can’t find a way to reproduce the error in an empty project. It looks like we have something too big that busts some buffer, but it worked fine in 4.15.
Now here are the errors we get when we load two different levels with a lot of sub-levels.
Our biggest level sends this error:
Assertion failed: ReaderPos + Num <= ReaderSize [File:D:\Build\++UE4+Release-4.16+Compile\Sync\Engine\Source\Runtime\Core\Public\Serialization/BufferReader.h] [Line: 53]
UE4Editor_Core!FDebug::AssertFailed() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:349]
UE4Editor_CoreUObject!FBufferReaderBase::Serialize() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\serialization\bufferreader.h:54]
UE4Editor_Core!operator<<() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\private\containers\string.cpp:1273]
UE4Editor_CoreUObject!operator<<() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\containers\array.h:1113]
UE4Editor_CoreUObject!operator<<() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\coreuobject\private\uobject\packagefilesummary.cpp:260]
UE4Editor_CoreUObject!FArchiveAsync2::ReadCallback() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:6776]
UE4Editor_Core!IAsyncReadRequest::SetComplete() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\async\asyncfilehandle.h:157]
UE4Editor_Core!FAsyncTask<FGenericReadRequestWorker>::DoWork() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\async\asyncwork.h:264]
UE4Editor_Core!FAsyncTask<FGenericReadRequestWorker>::DoThreadedWork() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\async\asyncwork.h:288]
UE4Editor_Core!FQueuedThread::Run() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\private\hal\threadingbase.cpp:442]
UE4Editor_Core!FRunnableThreadWin::Run() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\private\windows\windowsrunnablethread.cpp:76]
And one of our modestly big level sends this one:
Assertion failed: Ar.Tell() < MAX_SUMMARY_SIZE / 2 [File:D:\Build\++UE4+Release-4.16+Compile\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading.cpp] [Line: 6783]
UE4Editor_Core!FDebug::AssertFailed() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\private\misc\assertionmacros.cpp:349]
UE4Editor_CoreUObject!FArchiveAsync2::ReadCallback() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:6783]
UE4Editor_Core!IAsyncReadRequest::SetComplete() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\async\asyncfilehandle.h:157]
UE4Editor_Core!FAsyncTask<FGenericReadRequestWorker>::DoWork() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\async\asyncwork.h:264]
UE4Editor_Core!FAsyncTask<FGenericReadRequestWorker>::DoThreadedWork() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\public\async\asyncwork.h:288]
UE4Editor_Core!FQueuedThread::Run() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\private\hal\threadingbase.cpp:442]
UE4Editor_Core!FRunnableThreadWin::Run() [d:\build\++ue4+release-4.16+compile\sync\engine\source\runtime\core\private\windows\windowsrunnablethread.cpp:76]
Side note, I checked the engine source code and next to the line that causes the error these comments are written:
//@todoio change header format to put the TotalHeaderSize at the start of the file
check(Ar.Tell() < MAX_SUMMARY_SIZE / 2); // we need to be sure that we can at least get the size from the initial request. This is an early warning that custom versions are starting to get too big, relocate the total size to be at offset 4!
Any clue on what has changed in 4.16 that would cause this error? Is there any way to fix this? 4.16 has added many features that we absolutely want in our project, so staying on 4.15 would be a huge pain.
Any help would be greatly appreciated, if anyone needs more info/files, we can provide them.
Cheers!