leinlin / Miku-LuaProfiler

Apache License 2.0
1.88k stars 435 forks source link

xlua多线程环境下导致crash #7

Closed ZeroKill1024 closed 3 years ago

ZeroKill1024 commented 5 years ago

项目里面处理网络消息会异步回调到lua函数中,xlua已经使用了THREAD_SAFE宏: ========== OUTPUTTING STACK TRACE ==================

0x00000000777285FC (ntdll) _C_specific_handler 0x00000000774C2D3E (kernel32) RtlUnwindEx 0x000007FEDF3BEF9A (xlua) luaopen_ffi 0x000007FEDF338226 (xlua) lua_setlocal 0x000007FEDF336D08 (xlua) lua_xmove 0x000007FEDF331779 (xlua) lua_error 0x000007FEDF337C92 (xlua) lua_setlocal 0x000007FEDF337745 (xlua) lua_setlocal 0x000007FEDF3377A5 (xlua) lua_setlocal 0x000007FEDF33130D (xlua) lua_callk 0x000007FEDF34B677 (xlua) luaL_tolstring 0x000007FEDF34C1B2 (xlua) luaL_where 0x000007FEDF337C92 (xlua) lua_setlocal 0x000007FEDF348437 (xlua) lua_newthread 0x000007FEDF337751 (xlua) lua_setlocal 0x000007FEDF3377A5 (xlua) lua_setlocal 0x000007FEDF337F95 (xlua) lua_setlocal 0x000007FEDF3379E0 (xlua) lua_setlocal 0x000007FEDF3325F1 (xlua) lua_pcallk 0x000007FEDF361525 (xlua) lua_pcall 0x000000006E1F7ABB (Mono JIT Code) (wrapper managed-to-native) MikuLuaProfiler.LuaDLL:lua_pcall (intptr,int,int,int) 0x000000006F6A8153 (Mono JIT Code) MikuLuaProfiler.LuaLib:DoRefLuaFun (intptr,string,int) 0x000000006F7B4AB3 (Mono JIT Code) MikuLuaProfiler.LuaHook/<>cDisplayClass2_0:b0 () 0x000000006F7B3C49 (Mono JIT Code) MikuLuaProfiler.HookLuaSetup:LateUpdate () 0x000000006F735AA8 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_voidthis__ (object,intptr,intptr,intptr) 0x000007FEC7F7BE4B (mono-2.0-bdwgc) [c:\buildslave\mono\build\mono\mini\mini-runtime.c:2809] mono_jit_runtime_invoke 0x000007FEC7F01E32 (mono-2.0-bdwgc) [c:\buildslave\mono\build\mono\metadata\object.c:2919] do_runtime_invoke 0x000007FEC7F0AE3F (mono-2.0-bdwgc) [c:\buildslave\mono\build\mono\metadata\object.c:2966] mono_runtime_invoke 0x0000000140C00F2A (Unity) scripting_method_invoke 0x0000000140BF14FA (Unity) ScriptingInvocation::Invoke 0x0000000140BBA177 (Unity) MonoBehaviour::CallMethodIfAvailable 0x0000000140BBA891 (Unity) MonoBehaviour::CallUpdateMethod 0x00000001406ED76C (Unity) BaseBehaviourManager::CommonUpdate 0x00000001406F3BB6 (Unity) LateBehaviourManager::Update 0x000000014095F523 (Unity) InitPlayerLoopCallbacks'::2'::PreLateUpdateScriptRunBehaviourLateUpdateRegistrator::Forward 0x000000014095E357 (Unity) ExecutePlayerLoop 0x000000014095E423 (Unity) ExecutePlayerLoop 0x00000001409616D1 (Unity) PlayerLoop 0x000000014133A81F (Unity) PlayerLoopController::UpdateScene 0x0000000141338DD0 (Unity) Application::TickTimer 0x00000001414953AB (Unity) MainMessageLoop 0x0000000141497046 (Unity) WinMain 0x000000014247897A (Unity) scrt_common_main_seh 0x00000000774A652D (kernel32) BaseThreadInitThunk 0x000000007773C541 (ntdll) RtlUserThreadStart

========== END OF STACKTRACE ===========

A crash has been intercepted by the crash handler. For call stack and other details, see the latest crash report generated in:

leinlin commented 5 years ago

luaopen_ffi 炸掉了?

ZeroKill1024 commented 5 years ago

在LuaHookSetup判断THREAD_SAFE加上lock后好像没得问题了。