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 e6f9e0b0f6.
This commit is contained in:
Richard W.M. Jones
2020-03-06 18:59:52 +00:00
parent 6ff1055f40
commit 4e90febbaa
2 changed files with 14 additions and 0 deletions

View File

@@ -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)

View File

@@ -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 ();