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:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user