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 ...@@ -99,6 +99,11 @@ namespace NLua
private LuaNativeFunction panicCallback; private LuaNativeFunction panicCallback;
private ObjectTranslator translator; private ObjectTranslator translator;
/// <summary>
/// Used to protect the (global) object translator pool during add/remove
/// </summary>
private static readonly object translatorPoolLock = new object();
/// <summary> /// <summary>
/// Used to ensure multiple .net threads all get serialized by this single lock for access to the lua stack/objects /// Used to ensure multiple .net threads all get serialized by this single lock for access to the lua stack/objects
/// </summary> /// </summary>
...@@ -318,7 +323,10 @@ end ...@@ -318,7 +323,10 @@ end
LuaLib.LuaSetTable (luaState, -3); LuaLib.LuaSetTable (luaState, -3);
LuaLib.LuaNetPopGlobalTable (luaState); LuaLib.LuaNetPopGlobalTable (luaState);
translator = new ObjectTranslator (this, luaState); translator = new ObjectTranslator (this, luaState);
ObjectTranslatorPool.Instance.Add (luaState, translator); lock (translatorPoolLock)
{
ObjectTranslatorPool.Instance.Add (luaState, translator);
}
LuaLib.LuaNetPopGlobalTable (luaState); LuaLib.LuaNetPopGlobalTable (luaState);
LuaLib.LuaLDoString (luaState, Lua.initLuanet); LuaLib.LuaLDoString (luaState, Lua.initLuanet);
} }
...@@ -329,8 +337,11 @@ end ...@@ -329,8 +337,11 @@ end
return; return;
if (! CheckNull.IsNull(luaState)) { if (! CheckNull.IsNull(luaState)) {
LuaCore.LuaClose (luaState); lock (translatorPoolLock)
ObjectTranslatorPool.Instance.Remove (luaState); {
LuaCore.LuaClose (luaState);
ObjectTranslatorPool.Instance.Remove (luaState);
}
} }
} }
...@@ -1150,4 +1161,4 @@ end ...@@ -1150,4 +1161,4 @@ end
} }
#endregion #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