1
0
forked from aniani/vim

updated for version 7.3.808

Problem:    Python threads still do not work properly.
Solution:   Fix both Python 2 and 3.  Add tests. (Ken Takata)
This commit is contained in:
Bram Moolenaar
2013-02-13 14:17:08 +01:00
parent 51971b3398
commit 76d711c3b5
7 changed files with 123 additions and 19 deletions

View File

@@ -729,13 +729,11 @@ Python3_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
* PyEval_SaveThread. Without the call to PyEval_SaveThread, thread
* specific state (such as the system trace hook), will be lost
* between invocations of Python code. */
PyEval_InitThreads();
pygilstate = PyGILState_Ensure();
#ifdef DYNAMIC_PYTHON3
get_py3_exceptions();
#endif
@@ -754,13 +752,14 @@ Python3_Init(void)
*/
PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
// lock is created and acquired in PyEval_InitThreads() and thread
// state is created in Py_Initialize()
// there _PyGILState_NoteThreadState() also sets gilcounter to 1
// (python must have threads enabled!)
// so the following does both: unlock GIL and save thread state in TLS
// without deleting thread state
PyGILState_Release(pygilstate);
/* lock is created and acquired in PyEval_InitThreads() and thread
* state is created in Py_Initialize()
* there _PyGILState_NoteThreadState() also sets gilcounter to 1
* (python must have threads enabled!)
* so the following does both: unlock GIL and save thread state in TLS
* without deleting thread state
*/
PyEval_SaveThread();
py3initialised = 1;
}