VR application crashes using Async loading (5.1.1)
Closed this issue · 0 comments
IceFox98 commented
In my VR app I have a button that downloads the bytes array of an image and uses the plugin's function "LoadImageFromBytesAsync()" (from C++) to load the texture asynchronously.
The problem is that if I spam the button, my app crashes with the following error:
[...]
[2023.04.26-13.43.34:262][126]LogRuntimeImageReader: Reading image from byte array. First few bytes: 255 216 255
[2023.04.26-13.43.34:529][143]LogOutputDevice: Warning:
Script Stack (0 frames) :
[2023.04.26-13.43.34:664][143]LogAndroid: Error: === Critical error: ===
[2023.04.26-13.43.34:664][143]LogAndroid: Error:
[2023.04.26-13.43.34:664][143]LogAndroid: Error: Fatal error: [File:D:/UnrealEngineOculus/Engine/Source\Runtime/Core/Private/HAL/MallocBinned2.cpp] [Line: 1175]
[2023.04.26-13.43.34:664][143]LogAndroid: Error: FMallocBinned2 Attempt to GetAllocationSizeExternal an unrecognized block 0x3fc0000000000000
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB832C8AC libUnreal.so(0x000000000D82B8AC)![Unknown]() []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB832C758 libUnreal.so(0x000000000D82B758)!FMallocBinned2::GetAllocationSizeExternal(void*, unsigned long long&) []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB839D76C libUnreal.so(0x000000000D89C76C)!FMallocPoisonProxy::Realloc(void*, unsigned long long, unsigned int) []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB837B600 libUnreal.so(0x000000000D87A600)!FMemory::Realloc(void*, unsigned long long, unsigned int) []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB569511C libUnreal.so(0x000000000AB9411C)!TArray<char16_t, TSizedDefaultAllocator<32> >::ResizeForCopy(int, int) []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB618D3A4 libUnreal.so(0x000000000B68C3A4)![Unknown]() []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB618C2E0 libUnreal.so(0x000000000B68B2E0)!URuntimeImageLoader::Tick(float) []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BBDC6D5B0 libUnreal.so(0x000000001316C5B0)!FTickableGameObject::TickObjects(UWorld*, int, bool, float) []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BBCFD50AC libUnreal.so(0x00000000124D40AC)!UGameEngine::Tick(float, bool) []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB5677F74 libUnreal.so(0x000000000AB76F74)!FEngineLoop::Tick() []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB566F724 libUnreal.so(0x000000000AB6E724)!AndroidMain(android_app*) []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB567E468 libUnreal.so(0x000000000AB7D468)!android_main() []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007BB56B2808 libUnreal.so(0x000000000ABB1808)![Unknown]() []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007CB0B97C48 libc.so(0x00000000000D5C48)![Unknown]() []
[2023.04.26-13.43.34:664][143]LogAndroid: Error: [Callstack] 0x0000007CB0B44FE8 libc.so(0x0000000000082FE8)![Unknown]() []
It occurs 100% times when I spam the button and sometimes it crashes even if I start the app and spawn just one image.
If I use the Sync version of that function, the problem goes away, but the app hitches again.
This problem doesn't occur in PIE (so when using Windows build).
I post below my code:
void UImageDownloader::ManageTextureBytes(TArray<uint8> Data)
{
FLatentActionInfo LatentInfo;
LatentInfo.CallbackTarget = this;
LatentInfo.ExecutionFunction = TEXT("OnImageLoaded");
LatentInfo.UUID = 123;
LatentInfo.Linkage = 0;
URuntimeImageLoader* Loader = GetOuter()->GetWorld()->GetSubsystem<URuntimeImageLoader>();
FString Error;
bool bSuccess;
Loader->LoadImageFromBytesAsync(Data, FTransformImageParams(), OutTexture, bSuccess, Error, LatentInfo, GetOuter()->GetWorld());
}