diff --git a/BizHawk.MultiClient/LuaImplementation.cs b/BizHawk.MultiClient/LuaImplementation.cs index e47005c17f..2e56b82c36 100644 --- a/BizHawk.MultiClient/LuaImplementation.cs +++ b/BizHawk.MultiClient/LuaImplementation.cs @@ -218,15 +218,25 @@ namespace BizHawk.MultiClient public class ResumeResult { public bool WaitForFrame; + public bool Terminated; } public ResumeResult ResumeScript(Lua script) { currThread = script; - script.Resume(0); + int execResult = script.Resume(0); currThread = null; var result = new ResumeResult(); - result.WaitForFrame = FrameAdvanceRequested; + if (execResult == 0) + { + //terminated + result.Terminated = true; + } + else + { + //yielded + result.WaitForFrame = FrameAdvanceRequested; + } FrameAdvanceRequested = false; return result; } diff --git a/BizHawk.MultiClient/LuaInterface.dll b/BizHawk.MultiClient/LuaInterface.dll index bbb16a4224..597e436c4c 100644 Binary files a/BizHawk.MultiClient/LuaInterface.dll and b/BizHawk.MultiClient/LuaInterface.dll differ diff --git a/BizHawk.MultiClient/tools/LuaConsole.cs b/BizHawk.MultiClient/tools/LuaConsole.cs index 6ffc576d12..f48dddf487 100644 --- a/BizHawk.MultiClient/tools/LuaConsole.cs +++ b/BizHawk.MultiClient/tools/LuaConsole.cs @@ -845,6 +845,7 @@ namespace BizHawk.MultiClient if (!prohibit) { var result = LuaImp.ResumeScript(s.Thread); + if(result.Terminated) s.Stop(); s.FrameWaiting = result.WaitForFrame; } } diff --git a/LuaInterface/LuaInterface/Lua.cs b/LuaInterface/LuaInterface/Lua.cs index 11a73abe93..152778b97d 100644 --- a/LuaInterface/LuaInterface/Lua.cs +++ b/LuaInterface/LuaInterface/Lua.cs @@ -527,8 +527,8 @@ namespace LuaInterface int ret = LuaDLL.lua_resume(luaState, narg); if (ret == 1 /*LUA_YIELD*/) return 1; //yielded - if (ret == 0) //normal termination - what to do? - return 0; + if (ret == 0) + return 0; //normal termination //error. throw exception with error message (TBD - debug api to get call stack) ThrowExceptionFromError(top); return ret;