From 4e90febbaa20d72202637ad7e2b44ca2fe150bea Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Fri, 6 Mar 2020 18:59:52 +0000 Subject: [PATCH] RHEL 7: python: Check for _Py_IsFinalizing. This symbol is not present in Python 2.7 or 3.6. It's not really necessary to call this, it just avoids a crash in certain corner cases when the interpreter is shutting down. So make the call conditional on the function existing. Fixes commit e6f9e0b0f6a588abbc35854e8ad862207b6e26ec. --- m4/guestfs-python.m4 | 12 ++++++++++++ python/handle.c | 2 ++ 2 files changed, 14 insertions(+) diff --git a/m4/guestfs-python.m4 b/m4/guestfs-python.m4 index 2e736875c..0a49b7fc8 100644 --- a/m4/guestfs-python.m4 +++ b/m4/guestfs-python.m4 @@ -88,6 +88,18 @@ AS_IF([test "x$enable_python" != "xno"],[ AC_MSG_RESULT([$PYTHON_EXT_SUFFIX]) AC_CHECK_PROGS([PYCODESTYLE],[pycodestyle],[no]) + + dnl Look for some optional symbols in libpython. + old_LIBS="$LIBS" + + PYTHON_BLDLIBRARY=`$PYTHON -c "import distutils.sysconfig; \ + print (distutils.sysconfig.get_config_var('BLDLIBRARY'))"` + AC_CHECK_LIB([c],[_Py_IsFinalizing], + [AC_DEFINE([HAVE_PY_ISFINALIZING],1, + [Found _Py_IsFinalizing in libpython.])], + [],[$PYTHON_BLDLIBRARY]) + + LIBS="$old_LIBS" fi AC_SUBST(PYTHON_PREFIX) diff --git a/python/handle.c b/python/handle.c index 21077bba9..2db021f1b 100644 --- a/python/handle.c +++ b/python/handle.c @@ -121,8 +121,10 @@ guestfs_int_py_event_callback_wrapper (guestfs_h *g, PyObject *py_r; int threads_initialized = PyEval_ThreadsInitialized (); +#ifdef HAVE_PY_ISFINALIZING if (_Py_IsFinalizing ()) return; +#endif if (threads_initialized) py_save = PyGILState_Ensure ();