Commit a9698525 authored by Kalin Toshev's avatar Kalin Toshev
Browse files

Need to protect the translator pool with (global) lock during add/remove

parent 9e671dcc
......@@ -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);
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)) {
ObjectTranslatorPool.Instance.Remove (luaState);
lock (translatorPoolLock)
{
LuaCore.LuaClose (luaState);
ObjectTranslatorPool.Instance.Remove (luaState);
}
}
}
......
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