heroiclabs / nakama-unity

Unity client for Nakama server.
https://heroiclabs.com/docs/unity-client-guide
Other
407 stars 75 forks source link

iOS App crashes after suspend #135

Closed yanmasharski closed 2 years ago

yanmasharski commented 2 years ago

Unity 2021.2.28f1 Nakama Unity 3.4.1

  1. Group chat socket is opened and/or RPC function is in progress.
  2. Suspend an app.
  3. Wait over 5 minutes
  4. Resote an app
  5. Observe the crash

Thread 57 name: Thread 57 Crashed: 0 UnityFramework 0x000000010a381b84 il2cpp::icalls::mscorlib::System::Diagnostics::StackTrace::get_trace(Il2CppException*, int, bool) + 116 (StackTrace.cpp:35) 1 UnityFramework 0x000000010bf8a244 StackTrace_get_trace_m7E268880B99F044703C06F3171D9A14D4CD88EF3 + 16 (mscorlib16.cpp:10216) 2 UnityFramework 0x000000010bf8a244 StackTrace__ctor_mA8C6FDA297B79C6D9D0CC97698E6DDB8C2B139BB + 64 (mscorlib16.cpp:10265) 3 UnityFramework 0x000000010c09e478 ExceptionDispatchInfo__ctor_m414627ADF796349332A72E674B73C638E3E2FF41 + 208 (mscorlib6.cpp:27349) 4 UnityFramework 0x000000010c09e530 ExceptionDispatchInfo_Capture_m972BB7AC3DEF807C66DD794FA29D48829252F40B + 80 (mscorlib6.cpp:27394) 5 UnityFramework 0x000000010bfaa30c TaskExceptionHolder_AddFaultException_m54D4156B052D1EF35A8B020036BE34BC34C9A448 + 896 (mscorlib17.cpp:29039) 6 UnityFramework 0x000000010bfa4440 TaskExceptionHolder_Add_mC5DBC5809B714F95969C41B43B1EAADAFE8D1C1E + 28 (mscorlib17.cpp:28924) 7 UnityFramework 0x000000010bfa4440 Task_AddException_m65702F1D29D33143F49C9144D89F1ACBF5B113FB + 252 (mscorlib17.cpp:23096) 8 UnityFramework 0x000000010b50fd60 Task_1_TrySetException_m3DFC28BCD56E7EE8BDB841F1A97EF4BE8E156A02_gshared + 84 (Generics49.cpp:19121) 9 UnityFramework 0x000000010b5e8984 AsyncTaskMethodBuilder_1_SetException_m580CEDB88630842EC930931623D55DCD1798F9C3_gshared + 332 (Generics6.cpp:27401) 10 UnityFramework 0x000000010bca2e5c AsyncTaskMethodBuilder_1_SetException_m580CEDB88630842EC930931623D55DCD1798F9C3 + 12 (System9.cpp:29217) 11 UnityFramework 0x000000010bca2e5c U3CStartOperationU3Ed__58_MoveNext_mA92EABD1F8F3CE91103E228A56D16BE2E7C3FA35 + 1876 (System9.cpp:44111) 12 UnityFramework 0x000000010bff7e38 ContextCallback_Invoke_mF4F8496213E8F0925947DD8994A477AE2E54EFDF + 268 13 UnityFramework 0x000000010c09f530 ExecutionContext_RunInternal_mC5D58D6EDE270B4CDA05181E9064E040D6692B2B + 368 (mscorlib6.cpp:28640) 14 UnityFramework 0x000000010c028628 MoveNextRunner_Run_mF9986F86D538F629861F62DD912B18CC58980D8B + 260 (mscorlib21.cpp:35345) 15 UnityFramework 0x000000010bee6264 Action_Invoke_m3FFA5BE3D64F0FF8E1E1CB6F953913FADB5EB89E + 136 (mscorlib.cpp:0) 16 UnityFramework 0x000000010bef8ca8 AwaitTaskContinuation_RunOrScheduleAction_m0969B6B0998248D42B6E4D04AC29ADE2D62B6412 + 64 (mscorlib1.cpp:18745) 17 UnityFramework 0x000000010bfa5334 Task_FinishContinuations_m41A7DC9B3A0DC7181BC0B5D353E5A702D1B2D0FF + 532 (mscorlib17.cpp:26019) 18 UnityFramework 0x000000010b5139a0 Task_1_TrySetResult_mFACA5E5CB929DA46E7B8FCEA661D09D2FBF9732D_gshared + 144 (Generics49.cpp:21412) 19 UnityFramework 0x000000010b5e9b74 AsyncTaskMethodBuilder_1_SetResult_mB5C649BE806DEE4869A8A862F578A47C56341171_gshared + 332 (Generics6.cpp:28069) 20 UnityFramework 0x000000010bc9bb78 AsyncTaskMethodBuilder_1_SetResult_mE16ACBFD8AB5E7CCE2F9420DCEE9B1A50A770110 + 12 (System9.cpp:28726) 21 UnityFramework 0x000000010bc9bb78 U3CStartOperationU3Ed__23_MoveNext_m63ACDC7CCB0E43A57BCC0D7BF6D14AADEA88150E + 324 (System9.cpp:36285) 22 UnityFramework 0x000000010bff7e38 ContextCallback_Invoke_mF4F8496213E8F0925947DD8994A477AE2E54EFDF + 268 23 UnityFramework 0x000000010c09f530 ExecutionContext_RunInternal_mC5D58D6EDE270B4CDA05181E9064E040D6692B2B + 368 (mscorlib6.cpp:28640) 24 UnityFramework 0x000000010c028628 MoveNextRunner_Run_mF9986F86D538F629861F62DD912B18CC58980D8B + 260 (mscorlib21.cpp:35345) 25 UnityFramework 0x000000010bee6264 Action_Invoke_m3FFA5BE3D64F0FF8E1E1CB6F953913FADB5EB89E + 136 (mscorlib.cpp:0) 26 UnityFramework 0x000000010bef8ca8 AwaitTaskContinuation_RunOrScheduleAction_m0969B6B0998248D42B6E4D04AC29ADE2D62B6412 + 64 (mscorlib1.cpp:18745) 27 UnityFramework 0x000000010bfa5334 Task_FinishContinuations_m41A7DC9B3A0DC7181BC0B5D353E5A702D1B2D0FF + 532 (mscorlib17.cpp:26019) 28 UnityFramework 0x000000010b51a2ec Task_1_TrySetException_mAEC49933FB8034AA98C144D4F9122BE42B89BB0B_gshared + 100 (Generics49.cpp:25627) 29 UnityFramework 0x000000010b5ee1a8 AsyncTaskMethodBuilder_1_SetException_m884E7FC69FD7752AB504B4268B0013DA50A243E8_gshared + 332 (Generics6.cpp:31295) 30 UnityFramework 0x000000010bc9b9ec U3CProcessOperationU3Ed__24_MoveNext_mB0D2D020C1DE94FFD5D78109BC37802780D26A0D + 964 (System9.cpp:36046) 31 UnityFramework 0x000000010bff7e38 ContextCallback_Invoke_mF4F8496213E8F0925947DD8994A477AE2E54EFDF + 268 32 UnityFramework 0x000000010c09f530 ExecutionContext_RunInternal_mC5D58D6EDE270B4CDA05181E9064E040D6692B2B + 368 (mscorlib6.cpp:28640) 33 UnityFramework 0x000000010c028628 MoveNextRunner_Run_mF9986F86D538F629861F62DD912B18CC58980D8B + 260 (mscorlib21.cpp:35345) 34 UnityFramework 0x000000010bee6264 Action_Invoke_m3FFA5BE3D64F0FF8E1E1CB6F953913FADB5EB89E + 136 (mscorlib.cpp:0) 35 UnityFramework 0x000000010bef8ca8 AwaitTaskContinuation_RunOrScheduleAction_m0969B6B0998248D42B6E4D04AC29ADE2D62B6412 + 64 (mscorlib1.cpp:18745) 36 UnityFramework 0x000000010bfa5334 Task_FinishContinuations_m41A7DC9B3A0DC7181BC0B5D353E5A702D1B2D0FF + 532 (mscorlib17.cpp:26019) 37 UnityFramework 0x000000010b51a2ec Task_1_TrySetException_mAEC49933FB8034AA98C144D4F9122BE42B89BB0B_gshared + 100 (Generics49.cpp:25627) 38 UnityFramework 0x000000010b5ee1a8 AsyncTaskMethodBuilder_1_SetException_m884E7FC69FD7752AB504B4268B0013DA50A243E8_gshared + 332 (Generics6.cpp:31295) 39 UnityFramework 0x000000010bca1d14 U3CInnerWriteU3Ed__67_MoveNext_m39FA739B0AE2BDF2EF4122C92A31BE2D016CEEF0 + 632 (System9.cpp:42970) 40 UnityFramework 0x000000010bff7e38 ContextCallback_Invoke_mF4F8496213E8F0925947DD8994A477AE2E54EFDF + 268 41 UnityFramework 0x000000010c09f530 ExecutionContext_RunInternal_mC5D58D6EDE270B4CDA05181E9064E040D6692B2B + 368 (mscorlib6.cpp:28640) 42 UnityFramework 0x000000010c028628 MoveNextRunner_Run_mF9986F86D538F629861F62DD912B18CC58980D8B + 260 (mscorlib21.cpp:35345) 43 UnityFramework 0x000000010bee6264 Action_Invoke_m3FFA5BE3D64F0FF8E1E1CB6F953913FADB5EB89E + 136 (mscorlib.cpp:0) 44 UnityFramework 0x000000010bef8ca8 AwaitTaskContinuation_RunOrScheduleAction_m0969B6B0998248D42B6E4D04AC29ADE2D62B6412 + 64 (mscorlib1.cpp:18745) 45 UnityFramework 0x000000010bfa5334 Task_FinishContinuations_m41A7DC9B3A0DC7181BC0B5D353E5A702D1B2D0FF + 532 (mscorlib17.cpp:26019) 46 UnityFramework 0x000000010b51a2ec Task_1_TrySetException_mAEC49933FB8034AA98C144D4F9122BE42B89BB0B_gshared + 100 (Generics49.cpp:25627) 47 UnityFramework 0x000000010bef46c0 AsyncCallback_Invoke_mFCCCB843AEC4B5B3FC89BCED2BA839783920EA47 + 268 48 UnityFramework 0x000000010c01065c WaitCallback_Invoke_m8381182A104DD22C5EB4A8425A75821A56B54D09 + 152 (mscorlib20.cpp:0) 49 UnityFramework 0x000000010bfb6de8 Invoke + 84 (mscorlib18.cpp:111) 50 UnityFramework 0x000000010bfb6de8 ThreadPoolWorkQueue_Dispatch_mCC5743D99870EC7844CAB3FF3FA7D23A44A4A984 + 732 (mscorlib18.cpp:20786) 51 UnityFramework 0x00000001086e8724 RuntimeInvoker_FalseSByte_t928712DD662DC29BA4FAAE8CE2230AFB23447F0B(void (*)(), MethodInfo const*, void*, void**, void*) + 28 (Il2CppInvokerTable.cpp:121561) 52 UnityFramework 0x000000010a3c6ff8 il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) + 208 (Runtime.cpp:571) 53 UnityFramework 0x000000010a38f938 worker_thread(void*) + 332 (ThreadPoolWorkerThread.cpp:250) 54 UnityFramework 0x000000010a3ba318 il2cpp::vm::ThreadStart(void*) + 80 (Thread.cpp:709) 55 UnityFramework 0x000000010a391c90 il2cpp::os::Thread::RunWrapper(void*) + 88 (Thread.cpp:201) 56 UnityFramework 0x000000010a394878 il2cpp::os::ThreadImpl::ThreadStartWrapper(void*) + 40 (ThreadImpl.cpp:125) 57 libsystem_pthread.dylib 0x000000020f1999ac _pthread_start + 148 (pthread.c:891) 58 libsystem_pthread.dylib 0x000000020f198e68 thread_start + 8

novabyte commented 2 years ago

@yanmasharski Please can you share some of the code you use to manage your socket. Also when you mention that an RPC might be in progress is it an RPC over the socket or client object?

yanmasharski commented 2 years ago

RPC is running over client objet.

socket = client.NewSocket();
        try
        {
            await socket.ConnectAsync(session, true, 30);
        }
        catch
        {
            return;
        }

        socket.Closed += OnSocketClosed;
        socket.ReceivedError += OnReceivedException;

And we reconnect the socket after a 2-second delay if it was closed or if we got an exception and the socket is not connected. For reconnection, we use the following code

var connectTask = socket.ConnectAsync(session);
 await connectTask;
 var joinChatTask = socket.JoinChatAsync(channelId, channelType, true);
        var result = await joinChatTask;

var connectTask = socket.ConnectAsync(session, true, 30);

yanmasharski commented 2 years ago

The issue was solved by closing sockets on an app pause

private void OnApplicationPause(bool p)
    {
        if (p)
        {
            socket.CloseAsync();
        }
}