From 2e0ac111ab72b75153a9021b284720ed03fd75fb Mon Sep 17 00:00:00 2001 From: "andres.delikat" Date: Sat, 28 Jan 2012 22:00:51 +0000 Subject: [PATCH] Proper checking if lua is running when doing thread waiting/set --- BizHawk.MultiClient/LuaImplementation.cs | 1 + BizHawk.MultiClient/MainForm.cs | 6 +++--- BizHawk.MultiClient/tools/LuaConsole.cs | 22 ++++++++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/BizHawk.MultiClient/LuaImplementation.cs b/BizHawk.MultiClient/LuaImplementation.cs index 1df35b29be..d9a441b1a8 100644 --- a/BizHawk.MultiClient/LuaImplementation.cs +++ b/BizHawk.MultiClient/LuaImplementation.cs @@ -32,6 +32,7 @@ namespace BizHawk.MultiClient public void Close() { lua.Close(); + LuaWait.Dispose(); } public void LuaRegister(Lua lua) diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index 4705b504b6..b4c6f4897b 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -1620,12 +1620,12 @@ namespace BizHawk.MultiClient if (runFrame) { //client input-related duties - if (LuaConsole1.LuaImp.isRunning) + if (LuaConsole1.IsRunning()) { - LuaConsole1.LuaImp.LuaWait.WaitOne(); + LuaConsole1.WaitOne(); } - if (LuaConsole1.LuaImp.isRunning) + if (LuaConsole1.IsRunning()) { Global.MainForm.MainWait.Set(); } diff --git a/BizHawk.MultiClient/tools/LuaConsole.cs b/BizHawk.MultiClient/tools/LuaConsole.cs index a43f7bd60e..3d2ab78674 100644 --- a/BizHawk.MultiClient/tools/LuaConsole.cs +++ b/BizHawk.MultiClient/tools/LuaConsole.cs @@ -646,5 +646,27 @@ namespace BizHawk.MultiClient OpenLuaSession(); } + public bool IsRunning() + { + if (!this.IsHandleCreated || this.IsDisposed) + { + return false; + } + else + { + if (LuaImp.isRunning) + return true; + else + return false; + } + } + + public void WaitOne() + { + if (!this.IsHandleCreated || this.IsDisposed) + return; + + this.LuaImp.LuaWait.WaitOne(); + } } }