[lldb] Fix D114722 for python<=3.6

_Py_IsFinalizing was called _Py_Finalizing back then (and it was a
variable instead of a function).
This commit is contained in:
Pavel Labath
2022-01-19 11:59:19 +01:00
parent 6eb8fc9244
commit 6ff4af8e18
2 changed files with 23 additions and 13 deletions

View File

@@ -69,6 +69,28 @@ Expected<std::string> python::As<std::string>(Expected<PythonObject> &&obj) {
return std::string(utf8.get());
}
static bool python_is_finalizing() {
#if PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION < 7
return _Py_Finalizing != nullptr;
#else
return _Py_IsFinalizing();
#endif
}
void PythonObject::Reset() {
if (m_py_obj && Py_IsInitialized()) {
if (python_is_finalizing()) {
// Leak m_py_obj rather than crashing the process.
// https://docs.python.org/3/c-api/init.html#c.PyGILState_Ensure
} else {
PyGILState_STATE state = PyGILState_Ensure();
Py_DECREF(m_py_obj);
PyGILState_Release(state);
}
}
m_py_obj = nullptr;
}
Expected<long long> PythonObject::AsLongLong() const {
if (!m_py_obj)
return nullDeref();