RaiaN/RuntimeImageLoader

VR application crashes using Async loading (5.1.1)

Closed this issue · 0 comments

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());

}