From 2035a5e2f1583a5dd640542e515b6c1812b44056 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Thu, 12 Nov 2020 13:30:23 +0000 Subject: [PATCH] Avoid use of thread function deprecated in 3.9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PyEval_ThreadsInitialized was deprecated in 3.9, with deletion targetted for 3.11. Furthermore since 3.7 it is guaranteed that threads are always initialized by Py_Initialize(), so checking it is redundant. Signed-off-by: Daniel P. Berrangé --- typewrappers.h | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/typewrappers.h b/typewrappers.h index e5bc4c8..3bdc0ae 100644 --- a/typewrappers.h +++ b/typewrappers.h @@ -255,28 +255,48 @@ PyObject * libvirt_virDomainSnapshotPtrWrap(virDomainSnapshotPtr node); # endif /* !(__GNUC__ && !__STRICT_ANSI__ && !__cplusplus) */ #endif -#define LIBVIRT_BEGIN_ALLOW_THREADS \ +#if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 7 +# define LIBVIRT_BEGIN_ALLOW_THREADS \ LIBVIRT_STMT_START { \ PyThreadState *_save = NULL; \ if (PyEval_ThreadsInitialized()) \ _save = PyEval_SaveThread(); -#define LIBVIRT_END_ALLOW_THREADS \ +# define LIBVIRT_END_ALLOW_THREADS \ if (PyEval_ThreadsInitialized()) \ PyEval_RestoreThread(_save); \ } LIBVIRT_STMT_END -#define LIBVIRT_ENSURE_THREAD_STATE \ +# define LIBVIRT_ENSURE_THREAD_STATE \ LIBVIRT_STMT_START { \ PyGILState_STATE _save = PyGILState_UNLOCKED; \ if (PyEval_ThreadsInitialized()) \ _save = PyGILState_Ensure(); -#define LIBVIRT_RELEASE_THREAD_STATE \ +# define LIBVIRT_RELEASE_THREAD_STATE \ if (PyEval_ThreadsInitialized()) \ PyGILState_Release(_save); \ } LIBVIRT_STMT_END +#else + +# define LIBVIRT_BEGIN_ALLOW_THREADS \ + LIBVIRT_STMT_START { \ + PyThreadState *_save = PyEval_SaveThread(); + +# define LIBVIRT_END_ALLOW_THREADS \ + PyEval_RestoreThread(_save); \ + } LIBVIRT_STMT_END + +# define LIBVIRT_ENSURE_THREAD_STATE \ + LIBVIRT_STMT_START { \ + PyGILState_STATE _save = PyGILState_Ensure(); + +# define LIBVIRT_RELEASE_THREAD_STATE \ + PyGILState_Release(_save); \ + } LIBVIRT_STMT_END +#endif + #ifndef NULLSTR #define NULLSTR(s) ((s) ? (s) : "") #endif