When executing python scripts temporarily catch exceptions in renderer

* Errors like syntax and runtime errors in python are thrown as
  exceptions. So for when we invoke onto the renderer thread to do some
  work, we need to be able to catch those exceptions otherwise the whole
  program dies. So over the execute, temporarily switch the thread into
  a catching-exception mode, which then gets rethrown on the invoker's
  thread.
* Note that BeginInvoke shouldn't be used by python since the callback
  might happen after the execution has finished (there's no way to wait
  at the moment).
This commit is contained in:
baldurk
2015-03-29 19:59:40 +01:00
parent c0be5552e8
commit 8b9caa6cc2
2 changed files with 33 additions and 1 deletions
@@ -128,7 +128,9 @@ namespace renderdocui.Windows.Dialogs
try
{
m_Core.Renderer.SetExceptionCatching(true);
dynamic ret = engine.CreateScriptSourceFromString(script).Execute(scope);
m_Core.Renderer.SetExceptionCatching(false);
if (ret != null)
{
stdoutwriter.Write(ret.ToString() + Environment.NewLine);
@@ -137,6 +139,8 @@ namespace renderdocui.Windows.Dialogs
}
catch (Exception ex)
{
m_Core.Renderer.SetExceptionCatching(false);
// IronPython throws so many exceptions, we don't want to kill the application
// so we just swallow Exception to cover all the bases
string exstr = engine.GetService<ExceptionOperations>().FormatException(ex);