]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1834: PyEval_InitThreads() is deprecated in Python 3.9 v8.2.1834
authorBram Moolenaar <Bram@vim.org>
Sun, 11 Oct 2020 16:05:02 +0000 (18:05 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 11 Oct 2020 16:05:02 +0000 (18:05 +0200)
Problem:    PyEval_InitThreads() is deprecated in Python 3.9.
Solution:   Do not call PyEval_InitThreads in Python 3.9 and later. (Ken
            Takata, closes #7113)  Avoid warnings for functions.

src/if_py_both.h
src/if_python3.c
src/version.c

index 86942b686c691dd14746dd8d4e52dc32d84caea3..36dedaf2d547c8cedc482c2d7c6adc387ad7d8ed 100644 (file)
@@ -307,7 +307,7 @@ ObjectDir(PyObject *self, char **attributes)
 // Output buffer management
 
 // Function to write a line, points to either msg() or emsg().
-typedef void (*writefn)(char_u *);
+typedef int (*writefn)(char *);
 
 static PyTypeObject OutputType;
 
@@ -359,8 +359,8 @@ PythonIO_Flush(void)
 {
     if (old_fn != NULL && io_ga.ga_len > 0)
     {
-       ((char_u *)io_ga.ga_data)[io_ga.ga_len] = NUL;
-       old_fn((char_u *)io_ga.ga_data);
+       ((char *)io_ga.ga_data)[io_ga.ga_len] = NUL;
+       old_fn((char *)io_ga.ga_data);
     }
     io_ga.ga_len = 0;
 }
@@ -390,7 +390,7 @@ writer(writefn fn, char_u *str, PyInt n)
 
        mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)len);
        ((char *)io_ga.ga_data)[io_ga.ga_len + len] = NUL;
-       fn((char_u *)io_ga.ga_data);
+       fn((char *)io_ga.ga_data);
        str = ptr + 1;
        n -= len + 1;
        io_ga.ga_len = 0;
index e148e53bb7a06c920b0c6a83f917e8d0dd11e15a..495aed3596d3bad92e53138fe02005c8c9881ceb 100644 (file)
@@ -1002,11 +1002,10 @@ Python3_Init(void)
        reset_stdin();
        Py_Initialize();
 
-       // 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.
+#if PY_VERSION_HEX < 0x03090000
+       // Initialise threads.  This is deprecated since Python 3.9.
        PyEval_InitThreads();
+#endif
 #ifdef DYNAMIC_PYTHON3
        get_py3_exceptions();
 #endif
@@ -1024,12 +1023,14 @@ Python3_Init(void)
        // sys.path.
        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
+       // Without the call to PyEval_SaveThread, thread specific state (such
+       // as the system trace hook), will be lost between invocations of
+       // Python code.
+       // GIL may have been 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;
index 43613450cd2267dce9326854c6cfeeb16e910599..ced1ef78d65eaba9bf19626f30d3e011b928a66f 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1834,
 /**/
     1833,
 /**/