Commit 25c51407 authored by Vinicius Jarina's avatar Vinicius Jarina
Browse files

Merge pull request #203 from MaxVain/master

  Remove translator from the global pool before Lua state is closed
parents 5555f5a4 a9698525
......@@ -99,6 +99,11 @@ namespace NLua
private LuaNativeFunction panicCallback;
private ObjectTranslator translator;
/// <summary>
/// Used to protect the (global) object translator pool during add/remove
/// </summary>
private static readonly object translatorPoolLock = new object();
/// <summary>
/// Used to ensure multiple .net threads all get serialized by this single lock for access to the lua stack/objects
/// </summary>
......@@ -318,7 +323,10 @@ end
LuaLib.LuaSetTable (luaState, -3);
LuaLib.LuaNetPopGlobalTable (luaState);
translator = new ObjectTranslator (this, luaState);
ObjectTranslatorPool.Instance.Add (luaState, translator);
lock (translatorPoolLock)
{
ObjectTranslatorPool.Instance.Add (luaState, translator);
}
LuaLib.LuaNetPopGlobalTable (luaState);
LuaLib.LuaLDoString (luaState, Lua.initLuanet);
}
......@@ -329,8 +337,11 @@ end
return;
if (! CheckNull.IsNull(luaState)) {
LuaCore.LuaClose (luaState);
ObjectTranslatorPool.Instance.Remove (luaState);
lock (translatorPoolLock)
{
LuaCore.LuaClose (luaState);
ObjectTranslatorPool.Instance.Remove (luaState);
}
}
}
......@@ -1150,4 +1161,4 @@ end
}
#endregion
}
}
\ No newline at end of file
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment