changeset 4063:8b3e88bab702 v7.3.786

updated for version 7.3.786 Problem: Python threads don't run in the background (issue 103). Solution: Move the statements to manipulate thread state.
author Bram Moolenaar <bram@vim.org>
date Wed, 30 Jan 2013 11:44:39 +0100
parents 274c841f033a
children dc8b68cb1054
files src/if_python.c src/version.c
diffstat 2 files changed, 11 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -740,12 +740,11 @@ Python_Init(void)
 #else
 	PyMac_Initialize();
 #endif
-	/* Initialise threads, and save the state using PyGILState_Ensure.
-	 * Without the call to PyGILState_Ensure, thread specific state (such
-	 * as the system trace hook), will be lost between invocations of
-	 * Python code. */
+	/* Initialise threads, and below save the state using
+	 * PyGILState_Ensure.  Without the call to PyGILState_Ensure, thread
+	 * specific state (such as the system trace hook), will be lost
+	 * between invocations of Python code. */
 	PyEval_InitThreads();
-	pygilstate = PyGILState_Ensure();
 #ifdef DYNAMIC_PYTHON
 	get_exceptions();
 #endif
@@ -756,6 +755,10 @@ Python_Init(void)
 	if (PythonMod_Init())
 	    goto fail;
 
+	/* The first python thread is vim's, release the lock. */
+	Python_SaveThread();
+	pygilstate = PyGILState_Ensure();
+
 	globals = PyModule_GetDict(PyImport_AddModule("__main__"));
 
 	/* Remove the element from sys.path that was added because of our
@@ -764,8 +767,7 @@ Python_Init(void)
 	 * the current directory in sys.path. */
 	PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
 
-	/* the first python thread is vim's, release the lock */
-	Python_SaveThread();
+	PyGILState_Release(pygilstate);
 
 	initialised = 1;
     }
--- a/src/version.c
+++ b/src/version.c
@@ -726,6 +726,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    786,
+/**/
     785,
 /**/
     784,