Then, I have a blueprint based on this class. If I add any tags to the blueprint class in the editor, it crashes with error message Assertion failed: RecursionNotAllowed.Increment() == 1 [File:D:\Build++UE4+Release-4.18+Compile\Sync\Engine\Source\Runtime\CoreUObject\Private\Serialization\AsyncLoading.cpp] [Line: 4260]
Crash doesn’t happen if tag field in the blueprint is left empty. Occurring only in packaged builds, disabling Event driven loader doesn’t seem to matter. Launcher build. Tested in Windows_64, Android Api 25.
I tried reproducing this by copying the code you provided but I’m not getting any sort of crash. Would it be possible for you to provide a small reproduction project to reproduce this crash?
After some more testing, I managed to narrow down the cause of the issue. It seems to be causing crash if instances of base c++ class are added to a TMap list in a singleton class and accessed from other classes in the project.
I managed to replicate this issue in a clean test project Download link.
Bumps may get you a later response, as things are usually focused on when they haven’t been responded to in a longer amount of time. I’ll be taking a look at the issue in due time.
You mentioned in your original post that disabling Event Driven Loader doesn’t seem to change anything but, from testing the provided project, I only experience this crash when Event Driven Loader is enabled. Disabling Event Driven Loader isn’t a viable solution, but it could work as a workaround in the meantime. I’m going to test our latest internal build and if it still occurs, I’ll enter a bug report. I’ll keep you updated here.
I apologize for the delay on this but I’ve entered a bug for the issue. As mentioned before, disabling EDL would be the best workaround for now. You can find the bug report here: UE-53538
This will be fixed in a future update. I’m not sure how common the crash actually will be, but the fix is pretty simple if you want to do it yourself. Move the call to UGameplayTagsManager::Get() in UEngine::InitializeObjectReferences from the bottom of the function to the top of the function. If you don’t want to do engine changes you could also call that from your game module’s initialization