From 759a4536a45a3629cb4153d1f091dd02c35dabc0 Mon Sep 17 00:00:00 2001 From: zeromus Date: Sat, 22 Jul 2017 23:39:27 -0500 Subject: [PATCH] fix (maybe) the bad GC bug in luainterface? --- LuaInterface/Lua/src/LuaDLL.cpp | 12 ++++++++++++ LuaInterface/LuaInterface/Lua.cs | 2 +- LuaInterface/LuaInterface/ObjectTranslator.cs | 7 +++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/LuaInterface/Lua/src/LuaDLL.cpp b/LuaInterface/Lua/src/LuaDLL.cpp index d191a1444a..67ac0c4e21 100644 --- a/LuaInterface/Lua/src/LuaDLL.cpp +++ b/LuaInterface/Lua/src/LuaDLL.cpp @@ -618,6 +618,18 @@ namespace Lua511 static void lua_atunlock(IntPtr luaState, LuaCSFunction^ unlockf); #endif + //zero 22-jul-2017 + static int lua_pushthread(IntPtr luaState) + { + return ::lua_pushthread(((lua_State *)luaState.ToPointer())); + } + + static void lua_xmove(IntPtr from, IntPtr to, int n) + { + ::lua_xmove(((lua_State *)from.ToPointer()), ((lua_State *)to.ToPointer()),n); + } + + static void lua_pushnumber(IntPtr luaState, double number) { ::lua_pushnumber(toState, number); diff --git a/LuaInterface/LuaInterface/Lua.cs b/LuaInterface/LuaInterface/Lua.cs index bf4dc94404..5e9bb9065c 100644 --- a/LuaInterface/LuaInterface/Lua.cs +++ b/LuaInterface/LuaInterface/Lua.cs @@ -68,7 +68,7 @@ namespace NLua "-- Preload the mscorlib assembly \n"+ "luanet.load_assembly(\"mscorlib\") \n"; - /*readonly */ IntPtr luaState; + /*readonly */ public IntPtr luaState; //zero 22-jul-2017 - made public ObjectTranslator translator; LuaCSFunction panicCallback, lockCallback, unlockCallback; diff --git a/LuaInterface/LuaInterface/ObjectTranslator.cs b/LuaInterface/LuaInterface/ObjectTranslator.cs index 5235c1412b..bfe99fc5d8 100644 --- a/LuaInterface/LuaInterface/ObjectTranslator.cs +++ b/LuaInterface/LuaInterface/ObjectTranslator.cs @@ -803,6 +803,13 @@ namespace NLua { ((LuaFunction)o).push(luaState); } + //zero 22-jul-2017 + else if (o is Lua) + { + var lua = o as Lua; + LuaDLL.lua_pushnil(lua.luaState); + LuaDLL.lua_xmove(lua.luaState, luaState, 1); + } else { pushObject(luaState,o,"luaNet_metatable");