Audiokinetic's Community Q&A is the forum where users can ask and answer questions within the Wwise and Strata communities. If you would like to get an answer from Audiokinetic's Technical support team, make sure you use the Support Tickets page.

Crash in packaged unreal game on 2019.2.7, Asserting on AsyncLoadingThread.RecursionNotAllowed

+1 vote

Hi,
We recently migrated our project from version 2018.1.4 to 2019.2.7 and started using the event based packaging.
We got it working in the editor and in stand alone, but we get a crash on startup in packaged builds, both shipping and development.

I could not find any info about the crashes here on the forum but found a bugfix from version 2019.2.2 that could be related to the callstack we're seeing in the development build:
WG-48745 Fixed: Crash in packaged game with "Assertion failed: AsyncLoadingThread.RecursionNotAllowed"

I have appended the callstack from the development build, the assert that triggers is stripped in shipping so there it crashes further along with another assert.

Any info related to this crash or the bugfix mentioned would be appreciated.

Development Build:
Assertion failed: AsyncLoadingThread.RecursionNotAllowed.Increment() == 1 [File:D:/ws/SB-lowprio/UE4/Engine/Source/Runtime/CoreUObject/Private/Serialization/AsyncLoading.cpp] [Line: 3959]

FactoryGame!AssertFailedImplV() [d:\ws\sb-lowprio\ue4\engine\source\runtime\core\private\misc\assertionmacros.cpp:100]
FactoryGame!FDebug::CheckVerifyFailedImpl() [d:\ws\sb-lowprio\ue4\engine\source\runtime\core\private\misc\assertionmacros.cpp:450]
FactoryGame!FAsyncLoadingThread::ProcessAsyncLoading() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:3984]
FactoryGame!FAsyncLoadingThread::TickAsyncThread() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:4820]
FactoryGame!FAsyncLoadingThread::TickAsyncLoading() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:4519]
FactoryGame!FAsyncLoadingThread::FlushLoading() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:6979]
FactoryGame!LoadPackageInternal() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1111]
FactoryGame!LoadPackage() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1427]
FactoryGame!ResolveName() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:767]
FactoryGame!StaticLoadObjectInternal() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:829]
FactoryGame!StaticLoadObject() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:904]
FactoryGame!FStreamableManager::StreamInternal() [d:\ws\sb-lowprio\ue4\engine\source\runtime\engine\private\streamablemanager.cpp:1105]
FactoryGame!FStreamableManager::StartHandleRequests() [d:\ws\sb-lowprio\ue4\engine\source\runtime\engine\private\streamablemanager.cpp:1297]
FactoryGame!FStreamableManager::RequestAsyncLoad() [d:\ws\sb-lowprio\ue4\engine\source\runtime\engine\private\streamablemanager.cpp:1242]
FactoryGame!FStreamableManager::RequestAsyncLoad() [d:\ws\sb-lowprio\ue4\engine\source\runtime\engine\private\streamablemanager.cpp:1252]
FactoryGame!UAkAssetDataWithMedia::Load() [d:\ws\sb-lowprio\ue4\engine\plugins\wwise\source\akaudio\private\akassetbase.cpp:83]
FactoryGame!UAkAssetDataSwitchContainer::Load() [d:\ws\sb-lowprio\ue4\engine\plugins\wwise\source\akaudio\private\akaudioevent.cpp:76]
FactoryGame!AkEventBasedIntegrationBehavior::AkAudioEvent_Load() [d:\ws\sb-lowprio\ue4\engine\plugins\wwise\source\akaudio\private\integrationbehavior\akeventbasedintegrationbehavior.cpp:292]
FactoryGame!UObject::ConditionalPostLoad() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\obj.cpp:1071]
FactoryGame!FAsyncPackage::PostLoadObjects() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:6357]
FactoryGame!FAsyncPackage::TickAsyncPackage() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:5533]
FactoryGame!FAsyncLoadingThread::ProcessAsyncLoading() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:4064]
FactoryGame!FAsyncLoadingThread::TickAsyncThread() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:4820]
FactoryGame!FAsyncLoadingThread::TickAsyncLoading() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:4519]
FactoryGame!FAsyncLoadingThread::FlushLoading() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\serialization\asyncloading.cpp:6979]
FactoryGame!LoadPackageInternal() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1111]
FactoryGame!LoadPackage() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:1427]
FactoryGame!ResolveName() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:767]
FactoryGame!StaticLoadObjectInternal() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:829]
FactoryGame!StaticLoadObject() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:904]
FactoryGame!StaticLoadClass() [d:\ws\sb-lowprio\ue4\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:937]
FactoryGame!UFGGlobalSettings::Initialize() [d:\ws\sb-lowprio\ue4\games\factorygame\source\factorygame\private\fgglobalsettings.cpp:46]
FactoryGame!FFactoryGameModule::StartupModule() [d:\ws\sb-lowprio\ue4\games\factorygame\source\factorygame\private\factorygamemodule.cpp:22]
FactoryGame!FModuleManager::LoadModuleWithFailureReason() [d:\ws\sb-lowprio\ue4\engine\source\runtime\core\private\modules\modulemanager.cpp:423]
FactoryGame!FModuleDescriptor::LoadModulesForPhase() [d:\ws\sb-lowprio\ue4\engine\source\runtime\projects\private\moduledescriptor.cpp:561]
FactoryGame!FProjectManager::LoadModulesForProject() [d:\ws\sb-lowprio\ue4\engine\source\runtime\projects\private\projectmanager.cpp:63]
FactoryGame!FEngineLoop::LoadStartupModules() [d:\ws\sb-lowprio\ue4\engine\source\runtime\launch\private\launchengineloop.cpp:3910]
FactoryGame!FEngineLoop::PreInitPostStartupScreen() [d:\ws\sb-lowprio\ue4\engine\source\runtime\launch\private\launchengineloop.cpp:3272]
FactoryGame!GuardedMain() [d:\ws\sb-lowprio\ue4\engine\source\runtime\launch\private\launch.cpp:127]
FactoryGame!GuardedMainWrapper() [d:\ws\sb-lowprio\ue4\engine\source\runtime\launch\private\windows\launchwindows.cpp:137]
FactoryGame!WinMain() [d:\ws\sb-lowprio\ue4\engine\source\runtime\launch\private\windows\launchwindows.cpp:268]
FactoryGame!__scrt_common_main_seh() [d:\agent\_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

asked Dec 8, 2020 in General Discussion by Gustav L. (250 points)

1 Answer

+2 votes
Hi again, a followup on the issue, we have found what causes it and found a fix for it in our game.

The issue:
It was caused by a TryLoadClass we called in our game StartupModule, the class was a custom global settings class that contained some references to audio events.

The solution:
We moved this settings class to be loaded when first accessed instead of StartupModule, this postponed the call to TryLoadClass enough for it to not happen during the game module's startup.

Although we found a solution in our case we're still not sure if this is the expected behavior or if it is a bug that events cannot be loaded during the game module's startup call?
But If anyone else runs into this issue I hope this provides enough information for you to find a solution for your case.
answered Dec 11, 2020 by Gustav L. (250 points)
Thanks for sharing this.

It was something similar for me. I tried to load an audio asset using LoadObject<UAkAudioEvent>, but the .uasset file did not exist.
Apparently this is a issue still, or again. I had no problem building until I updated to 2021.1.6.774. I even went to 2021.7.7796 but it still has the crash.
Is there something I need to do to fix this? Or is it a issue that needs to be taken care of by Wwise in the next update?

Edit:
Apparently I had a race condition causing it. I had a hard coded file path which was not getting loaded in time. Removed it to be a blueprint variable fixed the problem.
...