Hey everyone,
After our latest release, we’ve been receiving some complaints from Nexus 7 users and Galaxy S users about occasional crashes. We got one of these devices for the office and were able to reproduce a crash, but it doesn’t seem to happen consistently. I thought it might be memory-related, but that doesn’t seem likely since the crash info (below) doesn’t suggest it, and the game runs fine on other devices with less available memory.
Here is the backtrace I’m receiving from Unity:
I/DEBUG ( 122): Build fingerprint: ‘google/nakasi/grouper:4.1.1/JRO03D/402395:user/release-keys’
I/DEBUG ( 122): pid: 21422, tid: 21440, name: UnityMain >>> com.xxxxx.xxxxx <<<
I/DEBUG ( 122): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 6c449000
(…)
backtrace:
#00 pc 00430354 lib/libunity.so <_MultiplyMatrixArrayWithBase4x4_NEON_loop>
#01 pc 0015d5e0 lib/libunity.so (SkinnedMeshRenderer::CalculateSkinningMatrices(Matrix4x4f const, Matrix4x4f*, unsigned int)+188)
#02 pc 0015d824 lib/libunity.so (SkinnedMeshRenderer::PrepareSkinCommon(SkinMeshInfo, unsigned long, int)+364)
#03 pc 0015e0f0 lib/libunity.so (SkinnedMeshRenderer::SkinMeshImmediate(unsigned long)+88)
#04 pc 0015e248 lib/libunity.so (SkinnedMeshRenderer::Render(int, ShaderLab::ChannelAssigns const)+252)
#05 pc 001cd914 lib/libunity.so (BatchRenderer::Add(BaseRenderer*, int, ShaderLab::ChannelAssigns const*, Matrix4x4f const, int)+112)
#06 pc 000d71f4 lib/libunity.so (ForwardVertexRenderLoop::PerformRendering(bool)+812)
#07 pc 000d7da8 lib/libunity.so (DoForwardVertexRenderLoop(ForwardVertexRenderLoop, RenderLoopContext, dynamic_array, bool, bool)+1516)
#08 pc 000d8e3c lib/libunity.so (DoRenderLoop(RenderLoop, RenderingPath, std::vector<VisibleNode, std::allocator >, bool)+1356)
#09 pc 000e12e4 lib/libunity.so (Camera:
oRender(void ()(Camera, RenderLoop, std::vector<VisibleNode, std::allocator >, Shader, std::string const), bool, Shader*, std::string const)+600)
#10 pc 000e23a0 lib/libunity.so (Camera::Render(int, Shader*, std::string const)+216)
#11 pc 00101468 lib/libunity.so (RenderManager::RenderCameras()+544)
#12 pc 002403fc lib/libunity.so (PlayerLoop(bool, bool, IHookEvent*)+1820)
#13 pc 0037aaf8 lib/libunity.so (UnityPlayerLoop()+96)
#14 pc 0001de30 /system/lib/libdvm.so (dvmPlatformInvoke+112)
#15 pc 0004d083 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+394)
#16 pc 00000214 /dev/ashmem/dalvik-jit-code-cache (deleted)
It seems pretty clear from the output that there is a segmentation fault occurring during a Matrix Multiply in the SkinnedMeshRenderer code. But beyond that, I’m rather stuck
. Is this likely a but that is occurring inside of the Unity engine, or is there something that I could do in my code to stop this from happening (short of not using Skinned Meshes, of course)? Has anyone else encountered anything like this?
The problem doesn’t occur on most devices, and only seems to be happening on Nexus and Galaxy S.