From c6cc3daa339bcdd5bdd6ea860047913999319610 Mon Sep 17 00:00:00 2001
From: ywg16-pc <hbtmdxywg@126.com>
Date: Wed, 10 Jan 2018 16:14:12 +0800
Subject: [PATCH] fixed bug of Exec method #591

---
 src/embed_tests/pyrunstring.cs | 15 +++++++++++++++
 src/runtime/pythonengine.cs    | 10 ++--------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/embed_tests/pyrunstring.cs b/src/embed_tests/pyrunstring.cs
index 81a1b07ca..07875a2a8 100644
--- a/src/embed_tests/pyrunstring.cs
+++ b/src/embed_tests/pyrunstring.cs
@@ -57,5 +57,20 @@ public void TestExec()
             object c = locals.GetItem("c").AsManagedObject(typeof(int));
             Assert.AreEqual(111, c);
         }
+
+        [Test]
+        public void TestExec2()
+        {
+            string code = @"
+class Test1():
+   pass
+
+class Test2():
+   def __init__(self):
+       Test1()
+
+Test2()";
+            PythonEngine.Exec(code);
+        }
     }
 }
diff --git a/src/runtime/pythonengine.cs b/src/runtime/pythonengine.cs
index 556da698f..a23c7ac79 100644
--- a/src/runtime/pythonengine.cs
+++ b/src/runtime/pythonengine.cs
@@ -496,12 +496,10 @@ internal static PyObject RunString(string code, IntPtr? globals, IntPtr? locals,
                     borrowedGlobals = false;
                 }
             }
-
-            var borrowedLocals = true;
+            
             if (locals == null)
             {
-                locals = Runtime.PyDict_New();
-                borrowedLocals = false;
+                locals = globals;
             }
 
             try
@@ -516,10 +514,6 @@ internal static PyObject RunString(string code, IntPtr? globals, IntPtr? locals,
             }
             finally
             {
-                if (!borrowedLocals)
-                {
-                    Runtime.XDecref(locals.Value);
-                }
                 if (!borrowedGlobals)
                 {
                     Runtime.XDecref(globals.Value);